home *** CD-ROM | disk | FTP | other *** search
/ The Datafile PD-CD 1 Issue 2 / PDCD-1 - Issue 02.iso / _utilities / utilities / 003 / _threedee / !ThreeDee / ShellLibRT (.txt) < prev    next >
RISC OS BBC BASIC V Source  |  1994-03-07  |  87KB  |  3,163 lines

  1.  >EvntShellSystem:ShellLib 
  2.  Squished by Lofty's !Shrink vsn 3.01 on 07-Mar-94 
  3. shell_LibraryVersion:=1.31*&64
  4. shell_Error:
  5. EA%,NA$:
  6. <>&D00
  7. <>&903
  8. &606C2:
  9. shell_OSCheckVersion(3)
  10. shell_FileExists("Resources:$.Resources.Edit.ThrowBack")
  11. shell_Exit:
  12. ("Set Basic$File <"+
  13. shell_GetAppName+"$BasicFile>"):
  14. "Edit:ThrowBack"
  15. shell_ErrorBox("Unexpected error:- "+
  16. $+" Internal error code "+
  17. $,"in "+
  18. 34+"EvntShellSystem:ShellLib"):
  19. EA%>0
  20. $,EA%-1)
  21. shell_ErrorBox(NA$)
  22. &606C2:
  23. shell_OK(hA$):
  24. &D00,hA$
  25. shell_ErrorBox(UA$):
  26. wA%,lA%:lA%=_shell_blk%:!lA%=
  27. :$(lA%+4)=UA$+
  28. =&D00
  29. =&903
  30. &600DF,lA%,17,"Message from "+
  31. shell_GetAppName
  32. &600DF,lA%,1,
  33. shell_GetAppName
  34. shell_GetLastSecureFileName:
  35. c%:c%=_U%!80:
  36. shell_GetString(nD%):
  37. MA$,SC%:
  38. ((nD%?SC%)>31
  39. SC%<&FF):MA$+=
  40. (nD%?SC%):SC%+=1:
  41. :=MA$
  42. shell_GetEventHandler(b%,w%,jB%):
  43. f%,j%,m%,q%,A$:
  44. b%=-1
  45. b%=-2
  46. XNq%=
  47. shell_HeapBlockInfo(_U%!&C)-8:f%=0:m%=
  48. :j%=_U%!&C:A$="":
  49. (j%!f%=b%)
  50. j%!(f%+4)
  51. j%!(f%+(&C+(jB%*4)))>&8000
  52. f#A$=$(j%!(f%+(&C+(jB%*4)))):m%=
  53. f%+=48
  54. j%!(f%+4)=w%
  55. j%!(f%+(&C+(jB%*4)))>&8000
  56. s#A$=$(j%!(f%+(&C+(jB%*4)))):m%=
  57. f%+=48
  58. f%+=48
  59. f%+=48
  60. ((f%>=q%)
  61. m%):=A$
  62. shell_GetEventMenu(pC%,b%,w%):
  63. f%,j%,m%,q%,k%:
  64. b%=-1
  65. b%=-2
  66. shell_HeapBlockInfo(_U%!&C)-8:f%=0:m%=
  67. :j%=_U%!&C:A$="":
  68. (j%!f%=b%)
  69. shell_Tracef0("GetEventMenu:window handle matched.."):
  70. j%!(f%+4)=w%
  71. "k%=j%!(f%+8):
  72. k%=-2
  73. k%=_U%!&FC
  74. :f%+=48:
  75. (f%>=q%
  76. m%):=k%
  77. shell_GetEventListOffset(b%,g%,j%,RC%,JE%):
  78. q%,f%,m%,d%,xB%,c%:
  79. (!j%=0
  80. (!j%=0)
  81. :!j%=
  82. shell_HeapBlockFetch(RC%):c%=!j%:c%!0=0:c%!4=0:=0
  83. shell_HeapBlockInfo(!j%)-8:f%=0:m%=
  84. :d%=-1:xB%=-1:c%=!j%:
  85. xB%<0
  86. (c%!f%=0
  87. c%!f%+4=0)
  88. xB%=f%
  89. (c%!f%=b%)
  90. g%=-1
  91. d%=f%:m%=
  92. shell_Tracef0("GetEventListOffset:icon handle is not -1"):
  93. c%!(f%+4)=g%
  94. d%=f%:m%=
  95. f%+=RC%
  96. f%+=RC%
  97. ((f%>=q%)
  98. (d%=-1
  99. xB%<0
  100. Id%=q%:!j%=
  101. shell_HeapBlockExtend(!j%,RC%):c%=!j%:c%+=d%:c%!0=0:c%!4=0
  102. d%=xB%
  103. shell_AttachPane(b%,
  104. cC%,i%,rA%,tA%):
  105. a%,d%,c%,BB%,GD%:
  106. shell_Tracef0("AttachPane:Attaching Pane Handler"):GD%=
  107. shell_WindowGetFlags(cC%):
  108. 1<<5)=0
  109. shell_Tracef0("AttachPane:'Pane' bit of pane window is not set, fixing.."):
  110. shell_WindowToggleFlags(cC%,1<<5)
  111. 1<<1)
  112. shell_Tracef0("AttachPane:'Moveable' bit of pane window is set, fixing.."):
  113. shell_WindowToggleFlags(cC%,1<<1)
  114. shell_GetEventListOffset(b%,-1,_U%+92,24,
  115. shell_Tracef0("AttachPane:Creating pane event block"):d%=
  116. shell_GetEventListOffset(b%,-1,_U%+92,24,
  117. ):a%=_U%!92+d%:a%!0=b%:a%!4=-1:a%!8=
  118. shell_HeapBlockFetch(4):a%!&C=
  119. shell_HeapBlockFetch(4):a%!16=
  120. shell_HeapBlockFetch(4)
  121. aa%!20=
  122. shell_HeapBlockFetch(4):c%=a%!8:!c%=-1:c%=a%!&C:!c%=-1:c%=a%!16:!c%=-1:c%=a%!20:!c%=-1
  123. :a%=_U%!92+d%:c%=a%!8:e%=0:BB%=0:
  124. c%!e%<>-1:e%+=4:BB%+=1:
  125. :a%!8=
  126. shell_HeapBlockExtend(a%!8,4):c%=a%!8:c%!(BB%*4)=cC%:c%!((BB%+1)*4)=-1:a%!&C=
  127. shell_HeapBlockExtend(a%!&C,4):c%=a%!&C:c%!(BB%*4)=i%:c%!((BB%+1)*4)=-1
  128. a%!16=
  129. shell_HeapBlockExtend(a%!16,4):c%=a%!16:c%!(BB%*4)=rA%:c%!((BB%+1)*4)=-1:a%!20=
  130. shell_HeapBlockExtend(a%!20,4):c%=a%!20:c%!(BB%*4)=tA%:c%!((BB%+1)*4)=-1:
  131. shell_AttachDataLoad(b%,g%,u%,A$,RF%):
  132. a%,c%,d%,N$:
  133. shell_Tracef0("AttachDataLoad:Attaching DataLoad Handler"):
  134. b%=-1
  135. b%=-2
  136. u%=u%
  137. 1<<31
  138. 0Pd%=
  139. shell_GetEventListOffset(b%,g%,_U%+96,16,
  140. ):a%=_U%!96+d%:
  141. a%!0=0
  142. a%!4=0
  143. shell_Tracef0("AttachDataLoad:This is the first DataLoad Event..."):a%!0=b%:a%!4=g%:a%!8=
  144. shell_HeapBlockFetch(8):c%=a%!8:c%!0=u%:c%!4=-1:a%!&C=
  145. shell_HeapBlockFetch(8):c%=a%!&C:c%!0=
  146. shell_HeapBlockFetch(
  147. (A$)+1):c%!4=-1:c%=c%!0:$c%=A$
  148. shell_Tracef0("AttachDataLoad:This is another DataLoad Event..."):a%!8=
  149. shell_HeapBlockExtend(a%!8,4):a%!&C=
  150. shell_HeapBlockExtend(a%!&C,4):e%=0:c%=a%!8:
  151. c%!e%<>-1:e%+=4:
  152. :c%!e%=u%:c%!(e%+4)=-1:c%=a%!&C:c%!e%=
  153. shell_HeapBlockFetch(
  154. A$+1)
  155. c%=c%!e%:$c%=A$
  156. shell_GetCmdLineArgs:
  157. shell_Tracef0("AttachDataLoad:cmdline  ="+N$):
  158. shell_Tracef0("AttachDataLoad:flag bit ="+
  159. ((_U%!&64
  160. 1<<5))):
  161. shell_Tracef0("AttachDataLoad:wh%      ="+
  162. ~b%):
  163. shell_Tracef0("AttachDataLoad:type%    ="+
  164. N$<>""
  165. (_U%!&64
  166. 1<<5)
  167. 1<<31
  168. c%=u%
  169. 1<<31
  170. c%=u%
  171. shell_FileType(N$)=c%
  172. shell_Tracef0("AttachDataLoad:Loading file.."):
  173. shell_MessageSendDataLoad(c%,N$):_U%!&64=_U%!&64
  174. (1<<5)
  175. shell_AttachDataSave(b%,g%,xA%,u%,QC%,A$):
  176. a%,c%,d%:
  177. shell_IconIsSprite(b%,g%)
  178. shell_OK(
  179. shell_MessageNoArgs("SHELLMSG29"))
  180. shell_IconSetButtonType(b%,g%,6):
  181. xA%=0
  182. xA%=&64
  183. shell_Tracef0("AttachDataSave:Attaching DataSave Handler to icon "+
  184. g%+" in window &"+
  185. ~b%):
  186. shell_Tracef0("AttachDataSave:Handler function is '"+A$+"'"):d%=
  187. shell_GetEventListOffset(b%,g%,_U%+72,24,
  188. ):a%=_U%!72+d%:a%!0=b%:a%!4=g%:a%!8=xA%:a%!&C=u%
  189. uHa%!16=QC%:a%!20=
  190. shell_HeapBlockFetch(
  191. (A$)+1):c%=a%!20:$c%=A$:
  192. &FF9:
  193. xA%>&8000
  194. }'_U%!&88=
  195. shell_HeapBlockInfo(xA%)-8
  196. _U%!&88=xA%
  197. xA%>&8000
  198. '_U%!&88=
  199. shell_HeapBlockInfo(xA%)-4
  200. _U%!&88=xA%
  201. :_U%!&8C=u%:_U%!&90=xA%:
  202. shell_AttachMenu(b%,w%,k%,mB%,gB%,_B%):
  203. w%>=0
  204. shell_IconSetButtonType(b%,w%,3)
  205. shell_Tracef0("AttachMenu:Attaching menu handle &"+
  206. ~k%+" to window handle &"+
  207. ~b%):
  208. shell_EventAdd(b%,w%,0,k%,""):
  209. shell_AttachMenuMaker(b%,w%,A$):
  210. shell_Tracef0("AttachMenuMaker:Attaching menumaker function '"+A$+"'"):
  211. shell_EventAdd(b%,w%,1,0,A$):
  212. shell_AttachMenuDBox(CB%,M$,TA$,SA$):
  213. a%,c%,nA%:
  214. shell_WindowLoaded(M$)
  215. shell_MessageOneArg("SHELLMSG03",M$)
  216. shell_HeapBlockFetch(&C):a%!0=
  217. shell_HeapBlockFetch(
  218. M$+1):c%=a%!0:$c%=M$:a%!4=
  219. shell_HeapBlockFetch(
  220. TA$+1):c%=a%!4:$c%=TA$:a%!8=
  221. shell_HeapBlockFetch(
  222. SA$+1):c%=a%!8:$c%=SA$:
  223. &45BCE,CB%,a%:
  224. &45BCC,,
  225. shell_AttachClickSelect(b%,w%,A$):
  226. shell_EventAdd(b%,w%,2,0,A$):
  227. shell_AttachClickAdjust(b%,w%,A$):
  228. shell_EventAdd(b%,w%,3,0,A$):
  229. shell_AttachUserRedraw(
  230. b%,A$):
  231. a%,JA%,SA%:a%=
  232. shell_HeapBlockFetch(40):!a%=b%:
  233. &400CB,,a%:JA%=a%!32:
  234. shell_HeapBlockReturn(a%):
  235. shell_Tracef0("AttachUserRedraw:flag%=&"+
  236. ~JA%):
  237. 1<<4)
  238. shell_Tracef0("AttachUserRedraw:auto redraw set!!"):SA%=b%:
  239. shell_WindowToggleFlags(b%,1<<4):
  240. b%<>SA%
  241. shell_UpdateWindowHandle(SA%,b%)
  242. shell_EventAdd(b%,-1,4,0,A$):
  243. shell_AttachDrag(b%,w%,jF%,A$):
  244. shell_EventAdd(b%,w%,6,0,A$):
  245. shell_AttachHelpTag(b%,w%,I$):
  246. shell_EventAdd(b%,w%,8,0,I$):
  247. shell_EventAdd(b%,w%,jB%,k%,A$):
  248. f%,dB%,j%,q%,m%:
  249. NC%:f%=0:m%=
  250. b%=-1
  251. b%=-2
  252. shell_HeapBlockInfo(_U%!&C)-8:j%=_U%!&C:
  253. (j%!f%=b%)
  254. j%!(f%+4)=w%
  255. f%+=48
  256. f%+=48
  257. (f%>=q%
  258. %f%=0:
  259. (j%!f%<>0):f%+=48:
  260. f%>=q%
  261. _U%!&C=
  262. shell_HeapBlockExtend(_U%!&C,48):j%=_U%!&C:j%!(f%+0)=0:j%!(f%+4)=0:j%!(f%+8)=0:j%!(f%+&C)=0:j%!(f%+16)=0:j%!(f%+20)=0:j%!(f%+24)=0:j%!(f%+28)=0:j%!(f%+32)=0:j%!(f%+36)=0:j%!(f%+40)=0:j%!(f%+44)=0
  263. :j%!(f%+0)=b%:j%!(f%+4)=w%:
  264. k%<>0
  265. j%!(f%+8)=k%
  266. :NC%=f%+(&C+(jB%*4)):
  267. j%!NC%<>0
  268. shell_HeapBlockReturn(j%!NC%)
  269. :dB%=
  270. shell_HeapBlockFetch(
  271. A$+1):$dB%=A$:j%!NC%=dB%:
  272. shell_EventDeleteAll(b%):
  273. f%,k%,m%,q%,j%,r%:f%=0:k%=0:m%=
  274. b%=-1
  275. b%=-2
  276. .>q%=
  277. shell_HeapBlockInfo(_U%!&C)-8:j%=_U%!&C:
  278. (j%!f%=b%)
  279. f%+=48
  280. (f%>=q%
  281. 8Cj%!(f%+0)=0:j%!(f%+4)=0:j%!(f%+8)=0:
  282. r%=&C
  283. j%!(f%+r%)<>0
  284. shell_HeapBlockReturn(j%!(f%+r%)):j%!(f%+r%)=0
  285. shell_Tracef0("EventDeleteAll:wh%=&"+
  286. ~b%):
  287. shell_DeleteEventDataSave(b%,-1):
  288. shell_DeleteEventBump(b%,-1):
  289. shell_DeleteEventBump(b%,g%):
  290. d%,a%,q%,j%,c%:j%=_U%!&68:
  291. shell_GetEventListOffset(b%,g%,_U%+&68,16,
  292. shell_Tracef0("DeleteEventBump:offset%="+
  293. d%>=0
  294. g%=-1
  295. shell_Tracef0("DeleteEventBump:Deleting Bump Event (all events for window handle &"+
  296. ~b%+")")
  297. shell_Tracef0("DeleteEventBump:Deleting Bump Event (window handle was &"+
  298. ~b%+" icon handle was "+
  299. g%+")")
  300. shell_HeapBlockInfo(_U%!&68)-8:
  301. d%=q%-16
  302. HA%=j%!&C:c%=HA%!&C:
  303. shell_HeapBlockReturn(c%!&C):
  304. shell_HeapBlockReturn(c%!16):
  305. shell_HeapBlockReturn(c%):
  306. shell_HeapBlockReturn(_U%!&68):_U%!&68=0:
  307. shell_Tracef0("DeleteEventDataSave:No Bump events now registered")
  308. _U%!&68=
  309. shell_HeapBlockExtend(_U%!&68,-16)
  310. a%=j%+d%:a%!0=0:a%!4=0:a%!8=0:HA%=a%!&C:
  311. shell_HeapBlockReturn(HA%!&C):
  312. shell_HeapBlockReturn(HA%!16):
  313. shell_HeapBlockReturn(HA%)
  314. d%<0:
  315. shell_DeleteEventDataSave(b%,g%):
  316. d%,a%,q%:
  317. shell_GetEventListOffset(b%,g%,_U%+72,24,
  318. d%>=0
  319. g%=-1
  320. shell_Tracef0("DeleteEventDataSave:Deleting DataSave Event (all events for window handle &"+
  321. ~b%+")")
  322. shell_Tracef0("DeleteEventDataSave:Deleting DataSave Event (window handle was &"+
  323. ~b%+" icon handle was "+
  324. g%+")")
  325. shell_HeapBlockInfo(_U%!72)-8:
  326. d%=q%-24
  327. shell_HeapBlockReturn(_U%!72):_U%!72=0:
  328. shell_Tracef0("DeleteEventDataSave:No DataSave events now registered")
  329. _U%!72=
  330. shell_HeapBlockExtend(_U%!72,-24)
  331. a%=j%+d%:a%!0=0:a%!4=0:a%!8=0:a%!&C=0:a%!16=0:
  332. shell_HeapBlockReturn(a%!20):a%!20=0
  333. d%<0:
  334. shell_MessageNoArgs(I$):=
  335. shell_MessageLookup(I$,"","")
  336. shell_MessageOneArg(I$,r$):=
  337. shell_MessageLookup(I$,r$,"")
  338. shell_MessageLookup(I$,r$,fA$):
  339. i%,L%,f$,yB%,YB%:
  340. I$,8)="SHELLMSG"
  341. yB%=_U%!284:YB%=_U%!280
  342. yB%=_U%!64:YB%=_U%!68
  343. &61502,YB%,I$,yB%,256,r$,fA$
  344. ,,,L%;i%:
  345. yB%?L%=&D:f$=$(yB%)
  346. shell_WimpInit(HC%,AA$):
  347. &400C0,HC%,&4B534154,AA$
  348. HC%,YA%:
  349. _U%!&64
  350. "WimpExt_Initialise",&E,YA%
  351. :_U%!&94=YA%:=YA%
  352. shell_WimpInit_I(HC%,AA$):
  353. &400C0,HC%,&4B534154,AA$
  354. HC%,YA%:
  355. _U%!&64
  356. "WimpExt_Initialise",&E,YA%
  357. :_U%!&94=YA%:
  358. "Interface_Initialise",YA%:=YA%
  359. shell_WimpCloseDown_I(YA%):
  360. shell_LoseFonts:
  361. _U%!&F0<>-1
  362. "XFontMenu_Release"
  363. _U%!&64
  364. "WimpExt_Initialise",&E,YA%
  365. &600DD,YA%,&4B534154:
  366. "XInterface_CloseDown",YA%:
  367. _U%!&64
  368. "XImpulse_CloseDown",_U%!&94
  369. WimpCloseDown(YA%):
  370. shell_LoseFonts:
  371. _U%!&F0<>-1
  372. "XFontMenu_Release"
  373. _U%!&64
  374. "WimpExt_Initialise",&E,YA%
  375. &600DD,YA%,&4B534154:
  376. _U%!&64
  377. "XImpulse_CloseDown",_U%!&94
  378. ("Unset "+_shell_AppName$+"$BasicFile"):
  379. shell_LoseFonts:
  380. r%,c%:c%=_U%!&E8:
  381. c%?r%>0:
  382. &40082,r%:c%?r%-=1:
  383. shell_FindFont(b$,yE%):
  384. JA%,zC%:zC%=_U%!&E8:
  385. &40081,,b$,yE%*16,c*16,0,0
  386. JA%:zC%?JA%+=1:
  387. zC%?JA%>=&FF
  388. shell_OK(
  389. shell_MessageNoArgs("SHELLMSG18"))
  390. shell_Init:
  391. cA%,r%,c%,N$:
  392. hA%,D$,E$:
  393. _U%330,_shell_blk%260:_Q%=
  394. shell_HeapBlockFetch(&BB8):cA%=
  395. shell_HeapBlockFetch(48):cA%!0=0:cA%!4=0:cA%!8=0:cA%!&C=0:cA%!16=0:cA%!20=0:cA%!24=0:cA%!28=0:cA%!32=0:cA%!36=0:cA%!40=0:cA%!44=0:_U%!0=0:_U%!4=0:_U%!8=0
  396. _U%!&C=cA%:_U%!16=1:_U%!20=0:_U%!24=0:_U%!28=0:_U%!32=0:_U%!36=0:_U%!40=0:_U%!44=-1:_U%!48=0:_U%!52=0:_U%!56=0:_U%!60=0:_U%!64=0:_U%!68=0:_U%!72=0:_U%!76=
  397. shell_HeapBlockFetch(256):_U%!80=0:_U%!84=-1:_U%!88=0:_U%!92=0:_U%!96=0:_U%!&64=0:_U%!&68=0
  398. _U%!&6C=-1:_U%!&70=-1:_U%!&74=-1:_U%!&78=-1:_U%!&7C=-1:_U%!&80=0:_U%!&84=0:_U%!&88=-1:_U%!&8C=-1:_U%!&90=-1:_U%!&94=0:_U%!&98=0:_U%!&9C=0:_U%!&A0=0:_U%!&A4=0:_U%!&A8=0:_U%!&AC=0:_U%!&B0=0:_U%!&B4=0:_U%!&B8=0:_U%!&BC=0:_U%!&C0=0:_U%!&C4=0:_U%!&C8=0
  399. _U%!&CC=0:_U%!&D0=-1:_U%!&D4=-1:_U%!&D8=0:_U%!&DC=0:_U%!&E0=0:_U%!&E4=0:_U%!&E8=
  400. shell_HeapBlockFetch(256):_U%!&EC=
  401. shell_HeapBlockFetch(256):_U%!&F0=-1:_U%!&F4=0:_U%!&F8=0:_U%!&FC=0:_U%!256=0:_U%!260=1:_U%!264=0:_U%!268=0:_U%!272=0:_U%!276=0
  402. _U%!280=0:_U%!284=0:_U%!288=-1:_U%!292=-1:_U%!296=-1:_U%!300=0:_U%!304=0:_U%!308=0:_U%!312=0:_U%!316=0:_U%!320=0:_U%!324=0:
  403. shell_MemFill(_U%!&E8,256,0):
  404. shell_MemFill(_U%!&EC,256,0):hA%=
  405. shell_HeapBlockFetch(256)
  406. shell_OSVarGetVal(hA%,256,"Obey$Dir",1):
  407. shell_HeapBlockReturn(hA%):E$=
  408. shell_Leaf(D$),2):_U%!&BC=
  409. shell_HeapBlockFetch((
  410. D$)+1):_U%!&C4=
  411. shell_HeapBlockFetch((
  412. E$)+1):c%=_U%!&BC:$c%=D$:c%=_U%!&C4:$c%=E$:N$=
  413. shell_OSReadCommandArg(1):
  414. N$<>""
  415. L_U%!&64=_U%!&64
  416. 1<<5:c%=
  417. shell_HeapBlockFetch(
  418. N$+1):$(c%)=N$:_U%!324=c%
  419. shell_OSModuleCheckVersion("WimpExtension",1.98):
  420. _U%!&64=_U%!&64
  421. RO3_Present:
  422. _U%!&64=_U%!&64
  423. 1<<&A
  424. shell_GetCmdLineArgs:
  425. _U%!324<>0
  426. N$=$(_U%!324)
  427. shell_Tracef0("GetCmdLineArgs:cmdline was "+N$):=N$
  428. shell_FileType(Z$):
  429. 8,5,Z$
  430. ,,u%:u%=(u%
  431. &FFF00)>>>8:=u%
  432. shell_FileExists(Z$):
  433. shell_CatInfoRead(Z$)="Not Found":=
  434. shell_CatInfoRead(Z$):
  435. u%,YC%,fC%,vA%,pB%,B$:
  436. 8,5,Z$
  437. u%,,YC%,fC%,vA%,pB%:
  438. ="Not Found"
  439. pB%=51
  440. B$+="WR "
  441. pB%=&BB
  442. B$+="LWR"
  443. pB%=&88
  444. B$+="DL "
  445. B$+=" "+
  446. shell_StringPadLeading(
  447. ~YC%,"0",8):B$+=" "+
  448. shell_StringPadLeading(
  449. ~fC%,"0",8):B$+=" "+
  450. shell_StringPadLeading(
  451. ~vA%,"0",8):=B$
  452. shell_GetAppDir:
  453. c%:c%=_U%!&BC:=$c%
  454. shell_GetAppDataDir:
  455. c%:c%=_U%!&C0:=$c%
  456. shell_GetAppName:
  457. c%:c%=_U%!&C4:=$c%
  458. shell_ResourcesInit:
  459. _$,c%,E$,D$:
  460. hA%,cB%,LC%:E$=
  461. shell_GetAppName:D$=
  462. shell_GetAppDir:hA%=
  463. shell_HeapBlockFetch(256):
  464. shell_OSVarExists(hA%,E$+"Res$Path")
  465. _U%!&64=_U%!&64
  466. shell_OSVarExists(hA%,E$+"Data$Dir")
  467. shell_OSVarGetVal(hA%,256,E$+"Data$Dir",1):_U%!&C0=
  468. shell_HeapBlockFetch((
  469. _$)+1):c%=_U%!&C0:$c%=_$
  470. _U%!&C0=
  471. shell_HeapBlockFetch((
  472. D$)+1):c%=_U%!&C0:$c%=D$
  473. _U%!&64
  474. shell_FileExists(E$+"Res:Messages")
  475. shell_MessagesInit(E$+"Res:Messages",_U%!68,_U%!64)
  476. shell_FileExists(E$+"Res:ShellMsgs")
  477. shell_MessagesInit(E$+"Res:ShellMsgs",_U%!280,_U%!284)
  478. shell_MessagesInit("ShellSysRes:ShellMsgs",_U%!280,_U%!284)
  479. &20035,-1,4
  480. ,,LC%:
  481. &20035,-1,5
  482. ,,cB%:
  483. cB%=1
  484. shell_FileExists(E$+"Res:Sprites22")
  485. 4_U%!16=
  486. shell_SpriteAreaLoad(E$+"Res:Sprites22")
  487. shell_FileExists(E$+"Res:Sprites")
  488. 2_U%!16=
  489. shell_SpriteAreaLoad(E$+"Res:Sprites")
  490. _U%!16=1
  491. shell_FileExists(E$+"Res:Templates")
  492. shell_TemplatesInit(E$+"Res:Templates")
  493. shell_FileExists(D$+".Messages")
  494. shell_MessagesInit(D$+".Messages",_U%!68,_U%!64)
  495. shell_FileExists(D$+".ShellMsgs")
  496. shell_MessagesInit(D$+".ShellMsgs",_U%!280,_U%!284)
  497. shell_MessagesInit("ShellSysRes:ShellMsgs",_U%!280,_U%!284)
  498. &20035,-1,4
  499. ,,LC%:
  500. &20035,-1,5
  501. ,,cB%:
  502. cB%=1
  503. shell_FileExists(D$+".Sprites22")
  504. /1_U%!16=
  505. shell_SpriteAreaLoad(D$+".Sprites22")
  506. shell_FileExists(D$+".Sprites")
  507. 2/_U%!16=
  508. shell_SpriteAreaLoad(D$+".Sprites")
  509. _U%!16=1
  510. shell_FileExists(D$+".Templates")
  511. shell_TemplatesInit(D$+".Templates")
  512. &45BC0:
  513. shell_HeapBlockReturn(_Q%):_Q%=
  514. shell_HeapBlockFetch(&400):
  515. shell_HeapBlockReturn(hA%):
  516. shell_SpriteAreaLoad(F$):
  517. FB%,S%,T%:S%=
  518. (F$):T%=
  519. #S%+16:
  520. #S%:FB%=
  521. shell_HeapBlockFetch(T%):!FB%=T%:FB%!4=0:FB%!8=16:FB%!&C=16:
  522. 46,521,FB%:
  523. 46,522,FB%,F$:
  524. shell_Tracef0("SpriteLoad:Sprite file loaded at &"+
  525. ~FB%):=FB%
  526. shell_UserSpritesBase:=_U%!16
  527. shell_SpriteGetPtr(qB%,Q$):
  528. KB%,f%:KB%=
  529. shell_HeapBlockFetch(21):$KB%=Q$:
  530. 46,280,qB%,KB%
  531. ,,f%:
  532. shell_HeapBlockReturn(KB%):=f%
  533. shell_TemplatesInit(F$):
  534. sB%,_C%,hE%,X%,f%,iB%:
  535. uD%,EA%,XC%,Q$,iA%,zD%,BA%:
  536. jA%,TC%,BE%,VC%,jA$,CA%:XC%=
  537. shell_HeapBlockFetch(20):EA%=0:iA%=0:uD%=
  538. shell_FileLength(F$):WE%=
  539. shell_HeapBlockFetch(uD%):sB%=WE%:
  540. shell_TemplateFileInfo(F$,iB%,iA%,BA%)
  541. BA%=0
  542. u|_U%!4=
  543. shell_HeapBlockFetch(20*iA%):UE%=
  544. shell_HeapBlockFetch(iB%):_C%=UE%:hE%=UE%+iB%:iA%=0:
  545. &600D9,,F$
  546. ;zD%:
  547. shell_MessageTwoArgs("SHELLMSG34","template",F$)
  548. :$XC%="*":
  549. &400DB,,sB%,_C%,hE%,_U%!&E8,XC%,EA%
  550. ,,_C%,,,Q$,EA%:
  551. EA%<>0
  552. !((_U%!4)+(16*iA%))=sB%:$(((_U%!4)+(16*iA%))+4)=Q$:
  553. shell_Tracef0("TemplatesInit:  Template Loaded: "+Q$):sB%+=(88+(sB%!84)*32):iA%+=1
  554. EA%=0:
  555. &400DA:_U%!0=iA%:
  556. shell_Tracef0("TemplatesInit:Templates resource file loaded at       &"+
  557. ~WE%+" ("+
  558. iA%+" templates)"):
  559. shell_Tracef0("TemplatesInit:Indirected buffer size used for loading &"+
  560. ~iB%)
  561. shell_MessageTwoArgs("SHELLMSG35","template",F$)
  562. shell_MessageTwoArgs("SHELLMSG36",F$,"template")
  563. shell_HeapBlockReturn(XC%):
  564. shell_WindowLoaded(M$):
  565. r%,m%:
  566. (M$)>&C
  567. shell_MessageOneArg("SHELLMSG02",M$)
  568. (_U%!0)-1:
  569. $(((_U%!4)+(16*r%))+4)=M$
  570. :r%=(_U%!0)-1
  571. r%:=m%
  572. shell_GetWB(M$):
  573. r%,m%:
  574. (M$)>&C
  575. shell_MessageOneArg("SHELLMSG02",M$)
  576. 5m%=-1:
  577. (_U%!0)-1:
  578. $(((_U%!4)+(16*r%))+4)=M$
  579. m%=r%:r%=(_U%!0)-1
  580. m%>-1
  581. =!((_U%!4)+(16*m%))
  582. shell_MessageOneArg("SHELLMSG03",M$)
  583. shell_MessageExpand(d$):
  584. L$,f$,qA%:L$="":
  585. d$,"\")>0:qA%=
  586. d$,"\"):L$+=
  587. d$,qA%-1):f$=
  588. d$,qA%+1,1):d$=
  589. d$,qA%+2):
  590. "A":L$+="Click ADJUST to"
  591. "a":L$+="ADJUST"
  592. "D":L$+="Drag with SELECT to"
  593. "d":L$+="Drag with ADJUST to"
  594. "G":L$+="This option is greyed out because"
  595. "R":L$+="Move the pointer right"
  596. "S":L$+="Click SELECT to"
  597. "s":L$+="SELECT"
  598. "T":L$+="This is the"
  599. "W":L$+="This window is"
  600. "w":L$+="window"
  601. L$+="\"+f$
  602. :=L$+d$
  603. shell_OpenMenu(OA%,PA%,kA%):
  604. A$:A$=
  605. shell_GetEventHandler(_U%!28,_U%!32,1):
  606. A$<>""
  607. shell_Tracef0("OpenMenu:About to call "+"FN"+A$+"("+
  608. _U%!28+","+
  609. _U%!32+")"):o%=
  610. ("FN"+A$+"(_U%!28,_U%!32)")
  611. shell_Tracef0("OpenMenu:no menumaker function registered")
  612. kA%<>_U%!24
  613. shell_HeapBlockExists(_U%!256)
  614. shell_HeapBlockReturn(_U%!256):_U%!256=0
  615. shell_HeapBlockExists(_U%!&F4)
  616. shell_HeapBlockReturn(_U%!&F4):_U%!&F4=0
  617. kA%=_U%!&FC
  618. &400D4,,kA%,OA%-64,PA%:_U%!264=1
  619. _Q%!0=OA%:_Q%!4=PA%:
  620. &45BC5,kA%,_Q%:_U%!264=0
  621. :_U%!24=kA%:_U%!36=OA%:_U%!40=PA%:_U%!52=_U%!28:_U%!56=_U%!32:
  622. shell_MenuLastXPos:=_U%!36
  623. shell_MenuLastYPos:=_U%!40
  624. shell_MenuAttachDbox(a$):
  625. "Menu_SetSubHandle",_U%!8,
  626. shell_MenuString(a$),1:
  627. shell_Tracef0("MenuAttachDbox:Dialog box ("+a$+") attached"):
  628. shell_MessageWindow(H$,qE%,XA$,m$):
  629. uC%,lA%:lA%=
  630. shell_HeapBlockFetch(260):!lA%=0:$(lA%+4)=H$+
  631. m$=""
  632. m$="Message from "+XA$
  633. &400DF,lA%,19,m$
  634. &400DF,lA%,17,m$
  635. shell_HeapBlockReturn(lA%):=uC%
  636. shell_CreateWindow(CA$,
  637. WB%:WB%=
  638. shell_GetWB(CA$):WB%!64=_U%!16:
  639. &400C1,,WB%
  640. shell_CreateWindow2(N,i%,oE%,MF%,OF%,dA%,dD%,eA%,wA%,DB%):
  641. Q%:Q%=
  642. shell_HeapBlockFetch(&BB8):Q%!0=dD%:Q%!4=eA%:Q%!8=wA%:Q%!&C=DB%:Q%!16=0:Q%!20=0:Q%!24=-1:Q%!28=i%:Q%?32=7:Q%?33=2:Q%?34=oE%:Q%?35=MF%:Q%?36=3:Q%?37=1:Q%?38=2:Q%?39=0:Q%!40=0:Q%!44=dA%
  643. Q%!48=OF%:Q%!52=0:Q%!56=317:Q%!60=&3000:Q%!68=1:Q%!72=N:Q%!76=-1:Q%!80=
  644. $N:Q%!84=0:
  645. &400C1,,Q%
  646. shell_HeapBlockReturn(Q%):=h%
  647. shell_WindowHasTitleBar(b%):=(
  648. shell_WindowGetFlags(b%)
  649. 1<<26)
  650. shell_WindowIsMoveable(b%):=(
  651. shell_WindowGetFlags(b%)
  652. 1<<1)
  653. shell_WindowIsAPane(b%):=(
  654. shell_WindowGetFlags(b%)
  655. 1<<5)
  656. shell_WindowIsNotBounded(b%):=(
  657. shell_WindowGetFlags(b%)
  658. 1<<6)
  659. shell_WindowTrapsHotKeys(b%):=(
  660. shell_WindowGetFlags(b%)
  661. 1<<&C)
  662. shell_WindowIsOpen(b%):=(
  663. shell_WindowGetFlags(b%)
  664. 1<<16)
  665. shell_WindowIsOnTop(b%):=(
  666. shell_WindowGetFlags(b%)
  667. 1<<17)
  668. shell_WindowHasBeenToggled(b%):=(
  669. shell_WindowGetFlags(b%)
  670. 1<<18)
  671. shell_WindowHasInputFocus(b%):=(
  672. shell_WindowGetFlags(b%)
  673. 1<<20)
  674. shell_WindowHasBackIcon(b%):=(
  675. shell_WindowGetFlags(b%)
  676. 1<<24)
  677. shell_WindowHasCloseIcon(b%):=(
  678. shell_WindowGetFlags(b%)
  679. 1<<25)
  680. shell_WindowHasToggleIcon(b%):=(
  681. shell_WindowGetFlags(b%)
  682. 1<<27)
  683. shell_WindowHasVScrollBar(b%):=(
  684. shell_WindowGetFlags(b%)
  685. 1<<28)
  686. shell_WindowHasAdjustSizeIcon(b%):=(
  687. shell_WindowGetFlags(b%)
  688. 1<<29)
  689. shell_WindowHasHScrollBar(b%):=(
  690. shell_WindowGetFlags(b%)
  691. 1<<30)
  692. shell_WindowGetFlags(b%):
  693. i%,a%:a%=
  694. shell_HeapBlockFetch(36):a%!0=b%:
  695. &400CB,,a%:i%=a%!32:
  696. shell_HeapBlockReturn(a%):=i%
  697. shell_WindowGetTitleFlags(b%):
  698. i%,a%:a%=
  699. shell_HeapBlockFetch(&64+(
  700. shell_WindowCountIcons(b%)*32)):a%!0=b%:
  701. &400CC,,a%:i%=a%!60:
  702. shell_HeapBlockReturn(a%):=i%
  703. shell_IconGetFlags(b%,g%):
  704. i%,a%:a%=
  705. shell_HeapBlockFetch(50):a%!0=b%:a%!4=g%:
  706. &400CE,,a%:i%=a%!24:
  707. shell_HeapBlockReturn(a%):=i%
  708. shell_WindowTitleFlags(b%):
  709. i%,a%:a%=
  710. shell_HeapBlockFetch(&64+(
  711. shell_WindowCountIcons(b%)*32)):a%!0=b%:
  712. &400CC,,a%:i%=a%!60:
  713. shell_HeapBlockReturn(a%):=i%
  714. shell_WindowTitleHasBorder(b%):=(
  715. shell_WindowTitleFlags(b%)
  716. 1<<2)
  717. shell_WindowTitleIsSprite(b%):=(
  718. shell_WindowTitleFlags(b%)
  719. 1<<1)
  720. shell_WindowTitleIsText(b%):=(
  721. shell_WindowTitleFlags(b%)
  722. 1<<0)
  723. shell_WindowTitleIsHCentred(b%):=(
  724. shell_WindowTitleFlags(b%)
  725. 1<<3)
  726. shell_WindowTitleIsVCentred(b%):=(
  727. shell_WindowTitleFlags(b%)
  728. 1<<4)
  729. shell_WindowTitleIsFilled(b%):=(
  730. shell_WindowTitleFlags(b%)
  731. 1<<5)
  732. shell_WindowTitleIsAAliased(b%):=(
  733. shell_WindowTitleFlags(b%)
  734. 1<<6)
  735. shell_WindowTitleIsIndirected(b%):=(
  736. shell_WindowTitleFlags(b%)
  737. 1<<8)
  738. shell_WindowGetTitle(b%):
  739. R$,a%:a%=
  740. shell_HeapBlockFetch(&64+(
  741. shell_WindowCountIcons(b%)*32)):a%!0=b%:
  742. &400CC,,a%:
  743. (a%!32
  744. 1<<26)
  745. ((a%!60)
  746. 256)=0
  747. R$=$(a%+76)
  748. R$=$(!(a%+76))
  749. shell_HeapBlockReturn(a%):=R$
  750. shell_WindowTitleBufferLength(b%):
  751. BA%,a%:a%=
  752. shell_HeapBlockFetch(&64+(
  753. shell_WindowCountIcons(b%)*32)):a%!0=b%:
  754. &400CC,,a%:
  755. ((a%!60)
  756. 256)=0
  757. BA%=&C
  758. BA%=a%!84
  759. shell_HeapBlockReturn(a%):=BA%
  760. shell_WindowMoveToIcon(b%,ID%,g%,rA%,tA%):
  761. n%,s%:n%=
  762. shell_HeapBlockFetch(50):s%=
  763. shell_HeapBlockFetch(36):s%!20=0:
  764. shell_OSCheckVersion(3)
  765. ID%=-1
  766. !s%=-2
  767. !s%=ID%
  768. &400CB,,s%
  769. :n%!0=ID%:n%!4=g%:
  770. &400CE,,n%:
  771. shell_WindowMoveTo(b%,n%!8+rA%-s%!20,n%!20+tA%):
  772. shell_HeapBlockReturn(n%):
  773. shell_HeapBlockReturn(s%):
  774. shell_WindowMoveTo(b%,OA%,PA%):
  775. yD%,dE%,d%,a%:a%=
  776. shell_HeapBlockFetch(&64+(
  777. shell_WindowCountIcons(b%)*32)):a%!0=b%:
  778. &400CC,,a%:yD%=a%!&C-a%!4:dE%=a%!16-a%!8:a%!4=OA%:a%!8=PA%:a%!&C=OA%+yD%:a%!16=PA%+dE%:
  779. &400C5,,a%:
  780. &400C6,,a%
  781. P.d%=
  782. shell_SearchStatic(_U%!&B8,b%):
  783. d%>-1
  784. shell_OpenWindowStatic(b%)
  785. shell_OpenWindowDynamic(b%,0,0)
  786. shell_HeapBlockReturn(a%):
  787. shell_WindowBringToTop(b%):
  788. PB%:PB%=
  789. shell_HeapBlockFetch(256):PB%!0=b%:
  790. &400CB,,PB%:PB%!28=-1:
  791. &400E7,2,PB%,b%:
  792. &400C7,0,PB%:
  793. shell_HeapBlockReturn(PB%):
  794. shell_UpdateWindow(h%,dD%,eA%,wA%,DB%):
  795. a%:a%=
  796. shell_HeapBlockFetch(a%):a%!0=h%:a%!4=dD%:a%!8=eA%:a%!&C=wA%:a%!16=DB%:
  797. &400C9,,a%
  798. &400CB,,a%:
  799. shell_HeapBlockReturn(a%):
  800. shell_OpenWindowDynamic(b%,rA%,tA%):
  801. o%,wB%:wB%=
  802. shell_HeapBlockFetch(20):_U%!20=b%:
  803. &400CF,,wB%:
  804. &400D4,,b%,wB%!0+rA%,wB%!4+tA%:
  805. shell_HeapBlockReturn(wB%):
  806. shell_ClaimKeypress:
  807. _U%!20<>0
  808. &400D4,,-1:o%=
  809. shell_DeleteWindow(_U%!20):_U%!20=0
  810. shell_OpenWindow(b%,ED%,xD%):
  811. d%,a%,t%,e%,jE%,UC%,QA%,mA%:
  812. CC%,JC%,DB%,XE%,kE%,EC%:d%=
  813. shell_GetEventListOffset(b%,-1,_U%+304,&C,
  814. d%>=0
  815. ga%=_U%!304+d%:c%=a%!8:
  816. shell_Tracef0("OpenWindow:About to call "+"FN"+$c%):EC%=
  817. ("FN"+$c%):
  818. EC%=0
  819. :JC%=
  820. :DB%=
  821. shell_HeapBlockFetch(&64):DB%!0=b%:
  822. &400CB,,DB%:
  823. (DB%!32
  824. &80000)=&80000
  825. shell_HeapBlockReturn(DB%):_Q%!0=b%:
  826. &400CB,,_Q%
  827. &400C5,,_Q%
  828. shell_GetEventListOffset(b%,-1,_U%+92,24,
  829. d%>-1
  830. Ya%=(_U%!92)+d%:eB%=a%!8:jD%=a%!&C:QB%=a%!16:fB%=a%!20:_Q%!0=b%:
  831. UC%=-1
  832. UC%=_Q%!28
  833. &400C5,,_Q%:
  834. &400CB,,_Q%:
  835. &400C6,,_Q%
  836. shell_HeapBlockFetch(&400):e%=0:
  837. eB%!e%<>-1:t%!0=eB%!e%:
  838. jE%=0
  839. jE%=t%!0
  840. +XE%=t%!0:
  841. &400CB,,t%:CC%=jD%!e%:
  842. 0,1:QA%=t%!16-t%!8:mA%=t%!&C-t%!4:t%!4=_Q%!4+QB%!e%:t%!&C=t%!4+mA%:t%!16=_Q%!16+fB%!e%:t%!8=t%!16-QA%
  843. 2:QA%=t%!16-t%!8:mA%=_Q%!&C-_Q%!4:t%!4=_Q%!4+QB%!e%:t%!&C=_Q%!&C:t%!16=_Q%!16+fB%!e%:t%!8=t%!16-QA%
  844. 3:QA%=_Q%!16-_Q%!8:mA%=t%!&C-t%!4:t%!4=_Q%!4+QB%!e%:t%!&C=t%!4+mA%:t%!16=_Q%!16:t%!8=_Q%!8+fB%!e%
  845. 4:QA%=t%!16-t%!8:mA%=_Q%!&C-_Q%!4:t%!4=_Q%!4+QB%!e%:t%!&C=_Q%!&C:t%!16=_Q%!8+QA%+fB%!e%:t%!8=t%!16+QA%
  846. 5:QA%=_Q%!16-_Q%!8:mA%=t%!&C-t%!4:t%!4=_Q%!&C-mA%+QB%!e%:t%!&C=t%!4+mA%:t%!16=_Q%!16:t%!8=_Q%!8
  847. t%!28=UC%
  848. t%!28=kE%
  849. &400C5,,t%:kE%=t%!0:e%+=4:
  850. _Q%!28=XE%:
  851. &400C5,,_Q%
  852. shell_HeapBlockReturn(t%)
  853. _Q%!0=b%:
  854. &400CB,,_Q%
  855. UC%=-2
  856. _Q%!28=-2
  857. xD%=-1
  858. _Q%!28=-1
  859. &400C5,,_Q%
  860. shell_CloseWindow(b%):
  861. d%,a%,eB%,jD%,QB%,fB%,p%,EC%:d%=
  862. shell_GetEventListOffset(b%,-1,_U%+308,&C,
  863. d%>=0
  864. ha%=_U%!308+d%:c%=a%!8:
  865. shell_Tracef0("CloseWindow:About to call "+"FN"+$c%):EC%=
  866. ("FN"+$c%):
  867. EC%=0
  868. shell_HeapBlockFetch(60):
  869. shell_GetEventListOffset(b%,-1,_U%+92,24,
  870. d%>-1
  871. la%=(_U%!92)+d%:jD%=a%!&C:QB%=a%!16:fB%=a%!20:e%=0:eB%=a%!8:
  872. eB%!e%<>-1:p%!0=eB%!e%:
  873. &400C6,,p%:e%+=4:
  874. :p%!0=b%:
  875. &400C6,,p%
  876. shell_HeapBlockReturn(p%):
  877. shell_DeleteWindow(h%):
  878. p%:p%=
  879. shell_HeapBlockFetch(20):
  880. h%<>0
  881. oktodeletew(h%)
  882. shell_EventDeleteAll(h%):
  883. h%=_U%!20
  884. _U%!20=0
  885. ..d%=
  886. shell_SearchStatic(_U%!&B8,h%):
  887. d%>-1
  888. c%=_U%!&B8+d%:c%!0=0
  889. :p%!0=h%:
  890. &400C3,,p%:h%=0
  891. shell_HeapBlockReturn(p%):=h%
  892. oktodeletew(h%):=-1
  893. oktoclosew(h%):=-1
  894. cliprect(A,
  895. wE%):
  896. GA%,KA%:
  897. lwaorigin(A,GA%,KA%):RA%=A!24-GA%:ZA%=A!28-KA%:HF%=A!32-GA%:wE%=A!36-KA%:
  898. poll(rB%,TE%):
  899. _U%!&64
  900. "WimpExt_PrePoll"
  901. &400C7,rB%,_Q%
  902. _U%!&64
  903. "WimpExt_Action",_U%!&94,_Q%,DA%
  904. shell_Poll_I(rB%,TE%):
  905. _U%!&64
  906. "WimpExt_PrePoll"
  907. &400C7,rB%,_Q%
  908. _U%!&64
  909. "WimpExt_Action",_U%!&94,_Q%,DA%
  910. "Interface_Poll",DA%,,TE%:=DA%
  911. shell_DoBackgroundTask:
  912. shell_IconIsDraggable(b%,g%):
  913. i%:i%=
  914. shell_IconGetFlags(b%,g%):c%=(i%
  915. &6000):
  916. c%=&6000=
  917. shell_IconIsSprite(b%,g%):
  918. i%,c%:i%=
  919. shell_IconGetFlags(b%,g%):c%=(i%
  920. 1<<1):
  921. c%=(1<<1)
  922. shell_IconDragBox(b%,g%):
  923. a%,H,J,cD%,i%,JA%,oD%,CE%,hB%,u$:
  924. QC%,Q$:cD%=
  925. shell_GetEventListOffset(b%,g%,_U%+72,24,
  926. cD%>=0
  927. na%=_U%!72+cD%:QC%=a%!16:Q$=
  928. shell_IconGetData(b%,QC%):
  929. Q$=""
  930. shell_OK(
  931. shell_MessageNoArgs("SHELLMSG28"))
  932. shell_HeapBlockFetch(&64+(
  933. shell_WindowCountIcons(b%)*32)):!a%=b%:
  934. &400CC,,a%:H=a%!4-a%!20:J=a%!16-a%!24:CE%=a%!68:a%!4=g%:
  935. &400CE,,a%:!a%=b%:a%!4=5:i%=a%!24:hB%=a%!32:a%!8=a%!8+H:a%!&C=a%!&C+J:a%!16=a%!16+H:a%!20=a%!20+J:a%!24=0:a%!28=0
  936. Ja%!32=&7FFFFFFF:a%!36=&7FFFFFFF:
  937. 6,&A1,28
  938. ,,JA%:oD%=((JA%
  939. 2)=2):
  940. JA%=i%:
  941. shell_IconGetCommand(hB%,"s")
  942. shell_OK(
  943. shell_MessageNoArgs("SHELLMSG19"))
  944. u$<>""
  945. &42400,&85,CE%,u$,a%+8:_U%!&64=_U%!&64
  946. &400D0,,a%
  947. &400D0,,a%
  948. shell_HeapBlockReturn(a%)
  949. shell_Tracef0("IconDragBox:WARNING! no drag handler registered for this icon!")
  950. shell_HandleAttachedMenu(_Q%,b%,g%):
  951. g%<>-1
  952. b%>-1
  953. shell_GetEventMenu(_Q%!8,b%,g%):
  954. k%<>0
  955. shell_HandleMenuOpen(_Q%,k%,b%,g%,
  956. shell_Action(UF%):
  957. A$,k%,a$,kA$,EB%,oA%,yA%,JD%:
  958. b%,g%,o%,_temp28%,_temp32%,_temp24%,_temp%,LD%:
  959. tB%,d%:
  960. shell_DoBackgroundTask
  961. shell_RedrawWindow(_Q%!0)
  962. shell_OpenWindow(_Q%!0,
  963. shell_CloseWindow(_Q%!0)
  964. shell_PointerLeavingWindow(_Q%)
  965. shell_PointerEnteringWindow(_Q%)
  966. 6:_U%!28=_Q%!&C:_U%!32=_Q%!16:oA%=_Q%!0:yA%=_Q%!4:_U%!272=_Q%!0:_U%!276=_Q%!4:_U%!320=_Q%!8:_temp28%=_Q%!&C:_temp32%=_Q%!16:g%=_Q%!16:
  967. shell_Tracef0("Action:Mouse_Click event detected")
  968. shell_Tracef0("Action:Window Handle was &"+
  969. ~_Q%!&C+" Icon Handle was "+
  970. _Q%!16):
  971. _Q%!&C=_U%!288
  972. _Q%!16=_U%!292
  973. shell_HandleBumpIcons(_U%!296,_Q%!&C,_Q%!16,_Q%!8)
  974. _U%!288=-1:_U%!292=-1:_U%!296=-1:
  975. _Q%!16>=0
  976. shell_GetEventListOffset(_Q%!&C,_Q%!16,_U%+&68,16,0):
  977. d%>=0
  978. shell_HandleBumpIcons(d%,_Q%!&C,_Q%!16,_Q%!8)
  979. (_Q%!8=64)
  980. 3BA%=
  981. shell_IconIsDraggable(_Q%!&C,_Q%!16):
  982. <V$="Icon is draggable":
  983. shell_IconDragBox(_Q%!&C,_Q%!16)
  984. V$="Icon is not draggable"
  985. shell_Tracef0("Action:"+V$)
  986. _Q%!8
  987. shell_ActionSelectButton
  988. shell_ActionMenuButton
  989. shell_ActionAdjustButton
  990. _U%!&64
  991. &42401:_U%!&64=_U%!&64
  992. :_U%!&80=0:A$=
  993. shell_GetEventHandler(_U%!28,_U%!32,6):
  994. A$<>""
  995. shell_Tracef0("Action:Drag event detected - function is "+A$):o%=
  996. ("FN"+A$+"(_temp28%,_temp32%)")
  997. shell_Tracef0("Action:Drag event detected - no handler function"):
  998. shell_SendDataSave(_U%!28,_U%!32)
  999. shell_Tracef0("Action:keypress is="+
  1000. _Q%!24):
  1001. _Q%!24
  1002. &D,394,398,399,410,430,431:JD%=
  1003. shell_WritableIconHandler(_Q%!0,_Q%!4,_Q%!24)
  1004. shell_HotKeyProcess(_Q%!24)
  1005. shell_Tracef0("Action:Keypress not claimed, passing it on"):
  1006. &400DC,_Q%!24
  1007. shell_Tracef0("Action:Keypress claimed by this application")
  1008. shell_ActionMenuSelect(_Q%)
  1009. 17,18:
  1010. shell_Receive(_Q%)
  1011. shell_UserMessageAcknowledge(_Q%)
  1012. shell_ActionSelectButton:
  1013. shell_Tracef0("ActionSelectButton:Mouse Button was SELECT"):
  1014. shell_HandleAttachedMenu(_Q%,_U%!28,_U%!32):A$=
  1015. shell_GetEventHandler(_U%!28,_U%!32,2):
  1016. _U%!32=0
  1017. shell_DataSaveCheckName(_U%!28,_U%!32)
  1018. A$<>""
  1019. shell_IconSlab(4,_U%!28,_U%!32):
  1020. shell_Tracef0("ActionSelectButton:About to call "+"FN"+A$+"("+
  1021. _temp28%+","+
  1022. _temp32%+")"):o%=
  1023. ("FN"+A$+"(_temp28%,_temp32%)")
  1024. _U%!32=0
  1025. _U%!28=_U%!20
  1026. &400D4,,-1
  1027. shell_ActionMenuButton:
  1028. c%,k%,uB%:uB%=
  1029. shell_Tracef0("ActionMenuButton:Mouse Button was MENU"):c%=
  1030. shiftmenuclick(_Q%!&C,_Q%!16)
  1031. shell_Tracef0("ActionMenuButton:Checking menu events.."):
  1032. shell_Tracef0("ActionMenuButton:button="+
  1033. _Q%!8+" _Q%!12="+
  1034. _Q%!&C+" _Q%!16="+
  1035. _Q%!16):k%=
  1036. shell_GetEventMenu(_Q%!8,_Q%!&C,_Q%!16):
  1037. (k%<>0
  1038. _Q%!&C>0
  1039. _Q%!16>=0)
  1040. K+k%=
  1041. shell_GetEventMenu(_Q%!8,_Q%!&C,-1)
  1042. shell_Tracef0("ActionMenuButton:Menu handle is:&"+
  1043. ~k%):
  1044. k%<>0
  1045. shell_HandleMenuOpen(_Q%,k%,_Q%!&C,_Q%!16,uB%)
  1046. shell_HandleMenuOpen(_Q%,k%,b%,g%,uB%):
  1047. n%,s%:
  1048. shell_OpenMenu(_Q%!0,_Q%!4,k%)
  1049. shell_HeapBlockFetch(50):s%=
  1050. shell_HeapBlockFetch(36):n%!0=b%:n%!4=g%:
  1051. &400CE,,n%:s%!0=b%:
  1052. &400CB,,s%:
  1053. shell_OpenMenu(s%!4+n%!16+64,_Q%!4,k%):
  1054. s%!4+n%!16+64,_Q%!4:
  1055. shell_HeapBlockReturn(n%):
  1056. shell_HeapBlockReturn(s%)
  1057. shell_ActionMenuSelect(_Q%):
  1058. TD%,EB%,tB%,LD%,o%,lC%:lC%=
  1059. shell_HeapBlockFetch(256):
  1060. shell_Tracef0("ActionMenuSelect:Menu_Select event detected"):
  1061. &400CF,,_shell_blk%:EB%=
  1062. shell_HeapBlockFetch(256):
  1063. _U%!24=_U%!&FC
  1064. tB%=0:_U%!264=1
  1065. shell_CheckSelection(_Q%):
  1066. tB%>-1
  1067. _U%!264=1
  1068. _U%!264=0
  1069. _U%!264>0
  1070. "FontMenu_DecodeFontMenu",_Q%+tB%,EB%
  1071. LD%=1
  1072. shell_Tracef0("ActionMenuSelect:FontMenu selection ("+
  1073. shell_GetString(EB%)+")"):
  1074. shell_FontMenuSelectFont(
  1075. shell_GetString(EB%),_U%!260):
  1076. _shell_FontMenuSelFN$=""
  1077. &400D5,,_U%!24,_Q%,EB%:A$=
  1078. shell_GetEventHandler(_U%!52,_U%!56,0):_temp%=EB%:$_temp%=
  1079. shell_StringStripTrailing($_temp%," "):
  1080. A$<>""
  1081. ("FN"+A$+"($_temp%)")
  1082. _shell_FontMenuSelFN$<>""
  1083. ("FN"+_shell_FontMenuSelFN$+"(FNshell_FontMenuGetLastSelectedFont)")
  1084. shell_HeapBlockReturn(EB%):
  1085. _U%!264=0
  1086. &45BC4,_U%!24,_Q%
  1087. TD%,,lC%:
  1088. shell_MenuCallHandler(TD%,lC%)
  1089. _shell_blk%!8=1
  1090. shell_HeapBlockExists(_U%!&E0)
  1091.  _temp%=_U%!&E0:
  1092. $_temp%<>""
  1093. ("FN"+$_temp%+"(_U%!52,_U%!56)")
  1094. shell_OpenMenu(_U%!36,_U%!40,_U%!24)
  1095. _shell_FontMenuSelFN$=""
  1096. shell_HeapBlockReturn(lC%):
  1097. shell_ActionAdjustButton:
  1098. i%,A$,o%,vB%,e%:vB%=
  1099. shell_HeapBlockFetch(&C+(
  1100. shell_WindowCountIcons(_U%!28)*32)):
  1101. shell_Tracef0("Action:Mouse Button was ADJUST"):
  1102. _U%!28>0
  1103. &400D6,_U%!28,vB%,&F000,&B000:e%=0:
  1104. vB%!e%<>-1:
  1105. vB%!e%=_U%!32
  1106. shell_IconSet(_U%!28,_U%!32,1)
  1107. e%+=4:
  1108. shell_GetEventHandler(_U%!28,_U%!32,3):
  1109. A$<>""
  1110. shell_IconSlab(1,_U%!28,_U%!32):o%=
  1111. ("FN"+A$+"(_temp28%,_temp32%)")
  1112. shell_HeapBlockReturn(vB%):
  1113. shiftmenuclick(b%,g%):=
  1114. shell_IconSlab(pC%,b%,g%):
  1115. a%:a%=
  1116. shell_HeapBlockFetch(50):a%!8=pC%:a%!&C=b%:a%!16=g%:
  1117. "Interface_SlabButton",,a%:a%!8=0:
  1118. "Interface_SlabButton",,a%:
  1119. shell_HeapBlockReturn(a%):
  1120. shell_PointerLeavingWindow(_Q%):
  1121. n%,o%:n%=
  1122. shell_HeapBlockFetch(&C):
  1123. &400D6,!_Q%,n%,&3F0000,&F<<16:
  1124. !n%<>-1
  1125. ("FN"+
  1126. shell_IconGetData(!_Q%,!n%))
  1127. shell_HeapBlockReturn(n%):
  1128. shell_PointerEnteringWindow(_Q%):
  1129. n%,o%,b%:b%=_Q%!0:n%=
  1130. shell_HeapBlockFetch(&C):
  1131. &400D6,b%,n%,&3F0000,&E<<16:
  1132. !n%<>-1
  1133. ("FN"+
  1134. shell_IconGetData(b%,!n%))
  1135. shell_HeapBlockReturn(n%):
  1136. shell_RedrawWindow(h%):
  1137. OC%,A$,GA%,KA%,a%,n%:n%=
  1138. shell_HeapBlockFetch(&C):
  1139. &400D6,h%,n%,&3F0000,&D<<16:
  1140. !n%<>-1
  1141.         !A$=
  1142. shell_IconGetData(h%,!n%)
  1143. shell_HeapBlockReturn(n%):a%=
  1144. shell_HeapBlockFetch(&64):
  1145. A$=""
  1146. shell_GetEventHandler(h%,-1,4)
  1147. :a%!0=h%:
  1148. &400C8,,a%
  1149. OC%:GA%=a%!4-a%!20:KA%=a%!16-a%!24:
  1150. "Interface_Render3dWindow",,a%:
  1151. A$<>""
  1152. ("FN"+A$+"("+
  1153. a%+","+
  1154. GA%+","+
  1155. KA%+")")
  1156. &400CA,,a%
  1157. shell_HeapBlockReturn(a%):
  1158. shell_Receive(_Q%):
  1159. c%,o%:
  1160. _Q%!16
  1161. shell_Exit:
  1162. shell_DataSave(_Q%)
  1163. shell_DataSaveAck(_Q%)
  1164. shell_DataLoad(_Q%,
  1165. shell_DataLoadAck(_Q%)
  1166. shell_DataLoad(_Q%,
  1167. shell_RAMFetch(_Q%)
  1168. shell_RAMTransmit(_Q%)
  1169. shell_Message_PreQuit(_Q%)
  1170. _U%!&A4>0
  1171. shell_Tracef0("Receive:PaletteChange message received"):c%=_U%!&A4:o%=
  1172. ("FN"+$c%)
  1173. shell_Message_SaveDesktop(_Q%)
  1174. shell_Message_Shutdown(_Q%)
  1175. &502:
  1176. shell_InteractiveHelp(_Q%)
  1177. &400C0:
  1178. shell_MenuWarning(_Q%)
  1179. &400C1:
  1180. shell_Message_ModeChange(_Q%)
  1181. &400C2:
  1182. _U%!&A8>0
  1183. shell_Tracef0("Receive:TaskInitialise message received"):c%=_U%!&A8:o%=
  1184. ("FN"+$c%+"("+
  1185. (_Q%!4)+","+
  1186. shell_GetString(_Q%+28)+
  1187. 34+")")
  1188. _U%!&D0=-1
  1189. shell_GetString(_Q%+28)="StrongHelp"
  1190. _U%!&D0=_Q%!4:
  1191. shell_StrongHlpMsg("Help_Install -DieWithTask "+
  1192. shell_GetAppDir+"."+
  1193. shell_GetAppName):c%=_U%!&D8:
  1194. $c%<>""
  1195. shell_HelpWord($c%):
  1196. shell_HeapBlockReturn(_U%!&D8):_U%!&D8=0
  1197. &400C3:
  1198. _U%!&AC>0
  1199. shell_Tracef0("Receive:TaskCloseDown message received"):c%=_U%!&AC:o%=
  1200. ("FN"+$c%)
  1201. _Q%!4=_U%!&D0
  1202. _U%!&D0=-1
  1203. &400C7:
  1204. shell_Tracef0("Receive:TaskNameIs message received"):
  1205. shell_GetString(_Q%+28)="StrongHelp"
  1206. _U%!&D0=_Q%!20
  1207. shell_ScanForHelp
  1208. shell_HandleUnknownMessage2(_Q%)
  1209. shell_Message_ModeChange(_Q%):
  1210. d%,e%,RB%,s%:RB%=_U%!&B8:
  1211. _U%!&A0>0
  1212. shell_Tracef0("Message_ModeChange:ModeChange message received"):c%=_U%!&A0:o%=
  1213. ("FN"+$c%)
  1214. shell_HeapBlockFetch(&64):
  1215. RB%<>0
  1216. shell_Tracef0("Message_ModeChange:Checking static window list for pane events"):
  1217. RB%!e%<>-1:d%=
  1218. shell_GetEventListOffset(RB%!e%,-1,_U%+92,24,
  1219. d%>-1
  1220. shell_Tracef0("Message_ModeChange:Static window handle found"):
  1221. shell_WindowIsOpen(RB%!e%)
  1222. shell_Tracef0("Message_ModeChange:Window is open.."):!s%=RB%!e%:
  1223. &400C6,,s%:
  1224. shell_OpenWindow(RB%!e%,0,-1)
  1225. :e%+=4:
  1226. shell_HeapBlockReturn(s%):
  1227. shell_Message_Shutdown(_Q%):
  1228. _U%!312>0
  1229. shell_Tracef0("Message_Shutdown:Shutdown message received"):c%=_U%!312:o%=
  1230. ("FN"+$c%)
  1231. shell_HandleUnknownMessage2(_Q%):
  1232. _Q%!16
  1233. &43B00:W$=$(_Q%+20):
  1234. W$,30)="EvntShellLib:ShellDBug started"
  1235. _U%!&64
  1236. r_U%!&64=(_U%!&64
  1237. 1<<4):
  1238. shell_BroadcastMessage(&43B00,"ShellDBug:Init Debug messages from "+
  1239. shell_GetAppName)
  1240. W$,25)="EvntShellLib:TraceInitAck"
  1241. _U%!&64=(_U%!&64
  1242. 1<<4)
  1243. W$,20)="EvntShellLib:TraceOn"
  1244. shell_TraceOn
  1245. W$,21)="EvntShellLib:TraceOff"
  1246. shell_TraceOff
  1247. W$,28)="EvntShellLib:ListClickSelect"
  1248. shell_ListClickSelect
  1249. W$,28)="EvntShellLib:ListClickAdjust"
  1250. shell_ListClickAdjust
  1251. W$,25)="EvntShellLib:ListHelpTags"
  1252. shell_ListHelpTags
  1253. shell_HandleUnknownMessage(_Q%):
  1254. shell_HandleUnknownMessage(_Q%):
  1255. shell_AttachPreQuitHandler(A$):
  1256. c%,o%:
  1257. _U%!300>0
  1258. shell_HeapBlockReturn(_U%!300)
  1259. <_U%!300=
  1260. shell_HeapBlockFetch(
  1261. A$+1):c%=_U%!300:$c%=A$:
  1262. shell_AttachShutdownHandler(A$):
  1263. c%,o%:
  1264. _U%!312>0
  1265. shell_HeapBlockReturn(_U%!312)
  1266. <_U%!312=
  1267. shell_HeapBlockFetch(
  1268. A$+1):c%=_U%!312:$c%=A$:
  1269. shell_AttachModeChangeHandler(A$):
  1270. c%,o%:
  1271. _U%!&A0>0
  1272. shell_HeapBlockReturn(_U%!&A0)
  1273. J_U%!&A0=
  1274. shell_HeapBlockFetch(
  1275. A$+1):c%=_U%!&A0:$c%=A$:o%=
  1276. ("FN"+A$):
  1277. shell_AttachPaletteChangeHandler(A$):
  1278. c%,o%:
  1279. _U%!&A4>0
  1280. shell_HeapBlockReturn(_U%!&A4)
  1281. J_U%!&A4=
  1282. shell_HeapBlockFetch(
  1283. A$+1):c%=_U%!&A4:$c%=A$:o%=
  1284. ("FN"+A$):
  1285. shell_AttachTaskInitialiseHandler(A$):
  1286. c%,o%:
  1287. _U%!&A8>0
  1288. shell_HeapBlockReturn(_U%!&A8)
  1289. <_U%!&A8=
  1290. shell_HeapBlockFetch(
  1291. A$+1):c%=_U%!&A8:$c%=A$:
  1292. shell_AttachTaskCloseDownHandler(A$):
  1293. c%,o%:
  1294. _U%!&AC>0
  1295. shell_HeapBlockReturn(_U%!&AC)
  1296. <_U%!&AC=
  1297. shell_HeapBlockFetch(
  1298. A$+1):c%=_U%!&AC:$c%=A$:
  1299. shell_RAMFetch(_Q%):
  1300. fF%,lD%,xC%:xC%=
  1301. _U%!&90>&8000
  1302. shell_Tracef0("RAMFetch:RAMFetch called.."):_Q%!&C=_Q%!8:_Q%!16=7:lD%=_U%!&88:
  1303. _U%!&8C=&FF9
  1304. _U%!&90+=4
  1305. (lD%-_U%!&80)<_Q%!24
  1306. _Q%!24=lD%-_U%!&80:xC%=
  1307. shell_Tracef0("RAMFetch:Sending block")
  1308. &400F1,_U%!&94,_U%!&90+_U%!&80,_Q%!4,_Q%!20,_Q%!24:
  1309. &400E7,17,_Q%,_Q%!4:_U%!&78=_Q%!8:_U%!&80+=_Q%!24:
  1310. _U%!&80=0
  1311. shell_RAMTransmit(_Q%):
  1312. d%,a%,RA$,c%:
  1313. _Q%!&C=_U%!&70
  1314. 5$_U%!&80+=_Q%!24:
  1315. _Q%!24<_U%!&84
  1316. shell_Tracef0("RAMTransmit:Last block received"):d%=
  1317. shell_GetEventListOffset(_U%!28,_U%!32,_U%+96,16,
  1318. ):a%=_U%!96+d%:
  1319. shell_Tracef0("RAMTransmit:_U%!28="+
  1320. _U%!28):
  1321. shell_Tracef0("RAMTransmit:_U%!32="+
  1322. _U%!32)
  1323. shell_Tracef0("RAMTransmit:offset%="+
  1324. d%):c%=_U%!&9C:RA$=
  1325. shell_GetString(c%+44):
  1326. shell_UserFNLoadFile(c%!40,_U%!&98,a%!8,RA$,_U%!&84,a%)
  1327. shell_Tracef0("RAMTransmit:Block received"):
  1328. _U%!&80>_U%!&84
  1329. shell_Tracef0("RAMTransmit:Increasing buffer size.."):_U%!&98=
  1330. shell_HeapBlockExtend(_U%!&98,_U%!&80,_U%!&84)
  1331. :_Q%!&C=_Q%!8:_Q%!16=6:_Q%!20=_U%!&98+_U%!&80:_Q%!24=_U%!&84:
  1332. &400E7,18,_Q%,_Q%!4:_U%!&70=_Q%!8
  1333. shell_HeapBlockReturn(_U%!&98):_U%!&98=0:
  1334. shell_OK(
  1335. shell_MessageNoArgs("SHELLMSG15"))
  1336. shell_LoadFile(dF%):
  1337. p$,MB%,MC%,zA%:p$=
  1338. shell_GetString(_Q%+44):MB%=
  1339. shell_FileLength(p$):
  1340. MB%<0
  1341. shell_OK(
  1342. shell_MessageNoArgs("SHELLMSG16"))
  1343. jPzA%=
  1344. shell_HeapBlockFetch(MB%):
  1345. &20008,16,p$,zA%,0
  1346. ;MC%:
  1347. shell_VFlag(MC%)
  1348. shell_HeapBlockReturn(zA%):
  1349. shell_OK(
  1350. shell_MessageNoArgs("SHELLMSG17"))
  1351. shell_Tracef0("LoadFile:File "+p$+" loaded ok at &"+
  1352. ~zA%)
  1353. :=zA%
  1354. shell_VFlag(MC%):=((MC%
  1355. 1)=1)
  1356. shell_CheckType(u%,SB%,TB%):
  1357. qF%,e%,m%,c%,PC%:e%=0:m%=-1:PC%=
  1358. _U%!&64
  1359. _U%!&64=_U%!&64
  1360. SB%!e%<>-1:c%=SB%!e%:
  1361. 1<<31
  1362. c%=c%
  1363. 1<<31:PC%=
  1364. c%=u%
  1365. m%=e%:
  1366. L_U%!&64=_U%!&64
  1367. 1<<1:
  1368. shell_Tracef0("CheckType:Top Bit Load detected..")
  1369. :e%+=4:
  1370. (u%>=4096)
  1371. m%=-1
  1372. m%>-1
  1373. shell_Tracef0("CheckType:File type OK "+
  1374. ~SB%!m%)
  1375. shell_Tracef0("CheckType:File type NOT ok "+
  1376. m%<>-1
  1377. shell_Exit:
  1378. YB%:YB%=_U%!68:
  1379. &61504,YB%:
  1380. &2001E,7,,YB%:
  1381. shell_Tracef0("Exit:Application closing down"):
  1382. shell_TraceExit:
  1383. &606C2:
  1384. &600D0,,-1:
  1385. shell_WimpCloseDown_I(_U%!&94):
  1386. shell_DataLoad(_Q%,TB%):
  1387. gF%,d%,a%,_temp%,SB%,u%,e$:
  1388. shell_DataOpenOKToLoad(TB%,_Q%!40)
  1389. du%=_Q%!40:e$=
  1390. shell_GetString(_Q%+44):
  1391. shell_Tracef0("DataLoad:DataLoad message received"):
  1392. _U%!96<>0
  1393. d%=-1
  1394. shell_GetEventListOffset(_Q%!20,_Q%!24,_U%+96,16,
  1395. d%=-1
  1396. shell_GetEventListOffset(_Q%!20,-1,_U%+96,16,
  1397. d%>-1
  1398. 4a%=_U%!96+d%:
  1399. shell_CheckType(_Q%!40,a%!8,TB%)
  1400. shell_Tracef0("DataLoad:File type recognised (&"+
  1401. ~_Q%!40+")"):LF%=_Q%!&C:_Q%!&C=_Q%!8:_Q%!16=4:
  1402. &400E7,18,_Q%,_Q%!4:
  1403. _U%!&64
  1404. zA%=-1:_U%!&64=_U%!&64
  1405. shell_LoadFile(LF%=_U%!&6C)
  1406. shell_UserFNLoadFile(u%,zA%,a%!8,e$,_Q%!36,a%):
  1407. _U%!&9C<>0
  1408. shell_HeapBlockReturn(_U%!&9C):_U%!&9C=0
  1409. shell_Tracef0("DataLoad:File type NOT recognised (&"+
  1410. ~_Q%!40+")")
  1411. shell_DataOpenOKToLoad(TB%,u%):
  1412. BA%,AD%,s$,FA$:
  1413.     ZBA%=
  1414. shell_Tracef0("DataOpenOKToLoad:Message reason code was 3, normal drag load..")
  1415. shell_Tracef0("DataOpenOKToLoad:Message reason code was 5, double click load.."):AD%=
  1416. shell_HeapBlockFetch(256):s$=
  1417. shell_OSVarGetVal(AD%,256,"Alias$@RunType_"+
  1418. ~u%,1):
  1419. shell_Tracef0("DataOpenOKToLoad:Alias$@RunType="+s$):
  1420. shell_HeapBlockReturn(AD%)
  1421. zFA$=
  1422. shell_Branch(s$):
  1423. shell_Tracef0("DataOpenOKToLoad:dbug "+FA$):
  1424. shell_Leaf(FA$)="!"+
  1425. shell_GetAppName
  1426. :=BA%
  1427. shell_UserFNLoadFile(u%,zA%,SB%,_filename$,_file_size%,a%):
  1428. e%,m%,c%,o%:e%=0:m%=-1:
  1429. SB%!e%<>-1:c%=SB%!e%:
  1430. 1<<31
  1431. c%=c%
  1432. 1<<31
  1433. c%=u%
  1434. m%=e%
  1435. &[e%+=4:
  1436. :c%=a%!&C:o%=
  1437. ("FN"+$(c%!m%)+"("+
  1438. zA%+","+
  1439. u%+",_filename$,"+
  1440. _file_size%+")"):
  1441. shell_DataSave(_Q%):
  1442. c%,d%,a%,r%:
  1443. shell_Tracef0("DataSave:DataSave message received"):
  1444. _Q%!4<>_U%!&94
  1445. :Cd%=
  1446. shell_GetEventListOffset(_Q%!20,_Q%!24,_U%+96,16,
  1447. d%>-1
  1448. <2a%=_U%!96+d%:
  1449. shell_CheckType(_Q%!40,a%!8,
  1450. shell_Tracef0("DataSave:Filetype recognized (&"+
  1451. ~_Q%!40+")"):
  1452. shell_TopBitLoadInProgress
  1453. shell_Tracef0("DataSave:'no load' flag set"):
  1454. shell_Tracef0("DataSave:Sending Message_DataSaveAck"):_Q%!0=256:_Q%!&C=_Q%!8:_Q%!36=-1:_Q%!16=2:$(_Q%+44)=
  1455. shell_GetAppDir+".ScrapFile"+
  1456. &400E7,18,_Q%,_Q%!4
  1457. shell_HeapBlockReturn(_U%!&9C):_U%!&9C=
  1458. shell_HeapBlockFetch((_Q%!0)+8):c%=_U%!&9C:
  1459. _Q%!0
  1460. 4:c%!r%=_Q%!r%:
  1461. r%:_U%!28=_Q%!20:_U%!32=_Q%!24:_U%!&80=0:_U%!&84=_Q%!36:_U%!&98=
  1462. shell_HeapBlockFetch(_Q%!36):_Q%!0=28:_Q%!&C=_Q%!8:_Q%!16=6
  1463. _Q%!20=_U%!&98+_U%!&80:_Q%!24=_U%!&84:
  1464. &400E7,18,_Q%,_Q%!4:_U%!&70=_Q%!8:
  1465. shell_Tracef0("DataSave:Sending Message_RAMFetch")
  1466. shell_Tracef0("DataSave:Filetype NOT recognized")
  1467. shell_TopBitLoadInProgress:
  1468. _U%!&64
  1469. shell_SendDataSave(b%,g%):
  1470. a%,VA%,UB%,d%,MB%,o%:UB%=
  1471. shell_HeapBlockFetch(30):
  1472. &400CF,,UB%:d%=
  1473. shell_GetEventListOffset(b%,g%,_U%+72,24,
  1474. d%=-1
  1475. d%=-2
  1476. shell_MessageWindow(
  1477. shell_MessageNoArgs("SHELLMSG13"),0,"",
  1478. shell_MessageNoArgs("warning"))
  1479. a%=(_U%!72)+d%:
  1480. a%!8>&8000
  1481. $MB%=
  1482. shell_HeapBlockInfo(a%!8)-4
  1483. MB%=a%!8
  1484. :VA%=_U%!76:VA%!0=256:VA%!&C=0:VA%!16=1:VA%!20=UB%!&C:VA%!24=UB%!16:VA%!28=UB%!0:VA%!32=UB%!4:VA%!36=MB%:VA%!40=a%!&C:$(VA%+44)=
  1485. shell_Leaf(
  1486. shell_IconGetData(b%,a%!16)):
  1487. &400E7,18,VA%,VA%!20,VA%!24:_U%!&78=_Q%!8:_U%!&88=MB%:_U%!&8C=a%!&C
  1488. ;_U%!&90=a%!8:_U%!&9C=a%!4:_U%!&C8=VA%!20:_U%!&CC=VA%!24
  1489. shell_HeapBlockReturn(UB%):
  1490. shell_DataSaveAck(_Q%):
  1491. _fullname$,DA%,eA%,a%,c%,o%:
  1492. shell_Tracef0("DataSaveAck:DataSaveAck message received"):DA%=0:eA%=_Q%?(44+DA%):
  1493. eA%<>0:_fullname$+=
  1494. (eA%):DA%+=1:eA%=_Q%?(44+DA%):
  1495. shell_Tracef0("DataSaveAck:Full save name is: "+_fullname$)
  1496. shell_Tracef0("DataSaveAck:task="+
  1497. _Q%!4):
  1498. shell_Tracef0("DataSaveAck:mytask="+
  1499. _U%!&94):d%=
  1500. shell_GetEventListOffset(_U%!28,_U%!32,_U%+72,24,
  1501. d%=-1
  1502. d%=-2
  1503. shell_MessageNoArgs("SHELLMSG05")
  1504. %a%=(_U%!72)+d%:c%=a%!20:
  1505. $c%<>""
  1506. ("FN"+$c%+"(_fullname$)")
  1507. shell_HeapBlockExists(a%!8)
  1508. 8,&A,_fullname$,a%!&C,,a%!8,a%!8+
  1509. shell_HeapBlockInfo(a%!8)+1
  1510. shell_MessageNoArgs("SHELLMSG21")
  1511. _Q%!36>-1
  1512. _U%!80<>0
  1513. shell_HeapBlockReturn(_U%!80)
  1514. H_U%!80=
  1515. shell_HeapBlockFetch(
  1516. _fullname$+1):c%=_U%!80:$c%=_fullname$
  1517. :_Q%!16=3:!_Q%=256:_Q%!20=_U%!&C8:_Q%!24=_U%!&CC:_Q%!40=_U%!&8C:_Q%!36=
  1518. shell_FileLength(_fullname$):_Q%!&C=_Q%!8:
  1519. shell_Tracef0("DataSaveAck:File length is "+
  1520. _Q%!36+" bytes"):$(_Q%+44)=_fullname$+
  1521. (0):_U%!84=_Q%!8
  1522. shell_Tracef0("DataSaveAck:Sending DataLoad Message"):
  1523. &400E7,18,_Q%,_Q%!20,_Q%!24:
  1524. _U%!28<>_U%!20
  1525. shell_CloseWindow(_U%!28)
  1526. &400D4,,-1:
  1527. shell_DataSaveCheckName(b%,g%):
  1528. d%,a%,q%:a%=_U%!72:d%=0:
  1529. a%<>0
  1530. shell_HeapBlockInfo(a%)-8:
  1531. !(a%+d%)=b%
  1532. shell_IconGetData(!a%,a%!16):
  1533. Q$,".")=0
  1534. shell_OK(
  1535. shell_MessageNoArgs("SHELLMSG01"))
  1536.     d%=q%
  1537. :d%+=24:
  1538. d%>=q%
  1539. shell_DataLoadAck(_Q%):
  1540. shell_Tracef0("DataLoadAck:DataLoadAck message received (file received ok)"):
  1541. shell_UserMessageAcknowledge(_Q%):
  1542. _Q%!16
  1543. shell_AckDataLoad(_Q%)
  1544. shell_AckRAMFetch(_Q%)
  1545. shell_AckDataLoad(_Q%):
  1546. _Q%!&C<>_U%!84
  1547. &20008,6,"<Wimp$Scrap>":
  1548. &FF,"Data Transfer failed: Receiver died"
  1549. shell_AckRAMFetch(_Q%):
  1550. vD%,c%:c%=_U%!&9C:
  1551. shell_Tracef0("AckRAMFetch:AckRAMFetch called...."):
  1552. _Q%!&C<>_U%!&70
  1553. _U%!&80=0
  1554. shell_Tracef0("AckRAMFetch:Receiver does not support RAM transfer"):
  1555. &20023,"Wimp$Scrap",,-1,0,3
  1556. ,,vD%:
  1557. vD%<>0
  1558. $(c%+44)="<Wimp$Scrap>"+
  1559. (0):c%!0=(49+
  1560. shell_GetString(c%+44)))
  1561. 3:c%!&C=c%!8:c%!16=2:c%!36=-1:
  1562. &400E7,18,c%,c%!4:_U%!&6C=c%!8
  1563. shell_OK(
  1564. shell_MessageNoArgs("SHELLMSG14"))
  1565. shell_Tracef0("AckRAMFetch:RAM transfer started, but not enough data sent. Sender died?"):
  1566. shell_HeapBlockReturn(_U%!&98):_U%!&98=0:
  1567. shell_OK("SHELLMSG06")
  1568. shell_MenuWarning(_Q%):
  1569. A$,EB%,OA%,PA%,o%,_temp%,DA%,C$,VB%,a%:OA%=_Q%!24:PA%=_Q%!28:_U%!264=0:
  1570. _U%!20<>0
  1571. shell_Tracef0("MenuWarning:Removing last dynamic dbox (handle=&"+
  1572. ~_U%!20+")"):o%=
  1573. shell_DeleteWindow(_U%!20):
  1574. shell_Tracef0("MenuWarning:Last dynamic dbox removed")
  1575. _Q%!20
  1576. _U%!&E4:
  1577. shell_WindowRetitle(_U%!&E4,
  1578. shell_MessageNoArgs("warning")):
  1579. shell_IconPutData(_U%!&E4,1,
  1580. shell_MessageNoArgs("SHELLMSG07"),0):
  1581. &400E8,,_U%!&E4,OA%,PA%
  1582. shell_MenuGetItemAddress(_U%!24,_Q%+32):
  1583. shell_HeapBlockExists(VB%!4)
  1584. shell_MenuWarnDBox(VB%,OA%,PA%)
  1585. shell_HeapBlockFetch(32):
  1586. &45BC4,_U%!24,_Q%+32
  1587. ,,a%:
  1588. shell_FindMenuWarnEvent(a%!8,C$,J$):
  1589. shell_HeapBlockReturn(a%):
  1590. shell_MenuWarnSubMenu(_Q%!20,OA%,PA%,C$,J$)
  1591. shell_MenuWarnDBox(nA%,OA%,PA%):
  1592. c%,y%,o%:
  1593. c%=nA%!4:
  1594. shell_CreateWindow($c%!0,y%):
  1595. shell_Tracef0("MenuWarnDBox:Creating new dynamic dbox (handle=&"+
  1596. ~y%+")"):
  1597. $c%!4<>""
  1598. shell_Tracef0("MenuWarnDBox:Calling preopen FN '"+$c%!4+"'"):o%=
  1599. ("FN"+$c%!4+"("+
  1600. y%+")")
  1601. $c%!8<>""
  1602. shell_Tracef0("MenuWarnDBox:Calling postopen FN '"+$c%!8+"'"):o%=
  1603. ("FN"+$c%!8+"("+
  1604. y%+")")
  1605. &400E8,,y%,OA%,PA%:_U%!20=y%:
  1606. shell_FindMenuWarnEvent(fA%,
  1607. BA%,v%,c%,d%,m%,q%,_%,e%:
  1608. XB%:XB%=0:v%=_U%!&DC:d%=0:m%=
  1609. :C$="":XB%=0:
  1610. shell_HeapBlockExists(v%)
  1611. :e%+=4:
  1612. v%!e%=-1:q%=e%:e%=0:
  1613. shell_Tracef0("FindMenuWarnEvent:list_size%="+
  1614. :c%=!(v%+d%+0):
  1615. c%<>-1
  1616. c%=fA%
  1617. :_%=v%!(d%+4):C$=$_%:XB%=v%!(d%+8):_%=v%!(d%+&C):J$=$_%:
  1618. shell_Tracef0("FindMenuWarnEvent:submenu found")
  1619. :d%+=16
  1620. d%=q%
  1621. d%>=q%
  1622. C$="":J$=""
  1623. XB%=0
  1624. shell_Tracef0("FindMenuWarnEvent:warn fn not found..")
  1625. shell_MenuWarnSubMenu(MD%,OA%,PA%,C$,J$):
  1626. o%,c%,_A%,e%:_shell_FontMenuSelFN$=J$:
  1627. shell_HeapBlockExists(_U%!&E0)
  1628. shell_HeapBlockReturn(_U%!&E0)
  1629. C_U%!&E0=
  1630. shell_HeapBlockFetch(
  1631. C$+1):c%=_U%!&E0:$c%=C$:
  1632. C$<>""
  1633. ("FN"+C$+"(_U%!52,_U%!56)"):
  1634. shell_Tracef0("MenuWarnSubMenu:Calling FN"+C$)
  1635. MD%=_U%!&FC
  1636. shell_Tracef0("MenuWarnSubMenu:FontMenu opening.."):
  1637. shell_HeapBlockExists(_U%!256)
  1638. shell_HeapBlockReturn(_U%!256)
  1639. e%=0:
  1640. :e%+=4:
  1641. !(_Q%+32+e%)=-1:e%+=4:_U%!256=
  1642. shell_HeapBlockFetch(e%):c%=_U%!256:e%=0:
  1643. :c%!e%=!(_Q%+32+e%):e%+=4:
  1644. !(_Q%+32+e%)=-1:c%!e%=!(_Q%+32+e%):c%=_U%!256
  1645. shell_Tracef0("MenuWarnSubMenu:Selecting '"+
  1646. shell_FontMenuGetLastSelectedFont+"' in FontMenu.."):
  1647. "FontMenu_Select",
  1648. shell_FontMenuGetLastSelectedFont,_U%!260
  1649. ,_A%:_U%!264=1:
  1650. _A%<>_U%!&FC
  1651. shell_FontMenuUpdatePtr(_A%):_U%!&FC=_A%:MD%=_A%
  1652. _U%!264=0
  1653. &400E8,,MD%,OA%,PA%:
  1654. shell_AttachSubMenu(CB%,XB%,C$):
  1655. &45BCE,CB%,XB%:
  1656. C$<>""
  1657. &45BCC,,
  1658. shell_EventListMenuWarn(CB%,XB%,C$,"")
  1659. shell_EventListMenuWarn(CB%,KE%,C$,J$):
  1660. c%,_%,e%,v%:
  1661. _U%!&DC=0
  1662. _U%!&DC=
  1663. shell_HeapBlockFetch(32):c%=_U%!&DC:c%!0=CB%:c%!4=
  1664. shell_HeapBlockFetch(
  1665. C$+1):$(c%!4)=C$:c%!8=KE%:c%!&C=
  1666. shell_HeapBlockFetch(
  1667. J$+1):$(c%!&C)=J$:c%!16=-1:c%!20=-1:c%!24=-1:c%!28=-1
  1668. shell_HeapBlockExtend(_U%!&DC,32):_U%!&DC=v%:e%=0:
  1669. :e%+=16:
  1670. v%!e%=-1:c%=_U%!&DC:c%!e%=CB%:c%!(e%+4)=
  1671. shell_HeapBlockFetch(
  1672. C$+1):_%=c%!(e%+4):$(_%)=C$:c%!(e%+8)=KE%:c%!(e%+&C)=
  1673. shell_HeapBlockFetch(
  1674. J$+1):_%=c%!(e%+&C):$(_%)=J$
  1675. ;c%!(e%+16)=-1:c%!(e%+20)=-1:c%!(e%+24)=-1:c%!(e%+28)=-1
  1676. shell_InteractiveHelp(_Q%):
  1677. I$,V$,K$,GB%,VD%,iA$,n%:n%=
  1678. shell_HeapBlockFetch(&C):
  1679. &400D6,_Q%!32,n%,&3F0000,&C<<16:
  1680. !n%<>-1
  1681. (%I$=
  1682. shell_IconGetData(_Q%!32,!n%)
  1683. shell_HeapBlockReturn(n%):
  1684. I$=""
  1685. shell_GetEventHandler(_Q%!32,_Q%!36,8)
  1686. -7K$=
  1687. shell_IconGetValidation(_Q%!32,_Q%!36):
  1688. K$<>""
  1689. shell_StringUpperCase(
  1690. K$,1))="I"
  1691. K$,";"):
  1692. GB%=0
  1693. K$,2)
  1694. K$,2,GB%-2)
  1695. shell_StringUpperCase(K$),
  1696. shell_StringUpperCase(";i")):VD%=
  1697. shell_StringUpperCase(K$),
  1698. shell_StringUpperCase(";"),GB%+1):
  1699. GB%>0
  1700. VD%>0
  1701. K$,GB%+2,VD%-GB%-2)
  1702. K$,GB%+2)
  1703. I$<>""
  1704. _Q%!16=&503:_Q%!&C=_Q%!8:V$=
  1705. shell_MessageLookup(I$,"",""):V$=
  1706. shell_MessageExpand(V$):$(_Q%+20)=V$:!_Q%=(
  1707. V$+25)
  1708. &400E7,17,_Q%,_Q%!4
  1709. shell_Message_PreQuit(_Q%):
  1710. c%,XD%,a%,r%,gD%:
  1711. _U%!300>0
  1712. shell_HeapBlockFetch(256):
  1713. _Q%!0
  1714. 4:a%!r%=_Q%!r%:
  1715. shell_Tracef0("Message_PreQuit:PreQuit message received"):c%=_U%!300:XD%=a%!4:
  1716. !a%<24
  1717. gD%=0
  1718. gD%=a%!20
  1719. d2a%!&C=a%!8:
  1720. &400E7,19,a%,XD%:
  1721. ("FN"+$c%)<>0
  1722. _closedown%=
  1723. !a%=24:a%!24=508:
  1724. &400E7,8,a%,XD%:_closedown%=
  1725. shell_HeapBlockReturn(a%)
  1726. lwaorigin(A,
  1727. PA%):OA%=A!0-A!16:PA%=A!&C-A!20:
  1728. shell_Iconbar(EA%,q$,H$,hD%,k%,mB%,gB%,_B%):
  1729. H$=""
  1730. J!_Q%=EA%:_Q%!4=0:_Q%!8=0:_Q%!&C=70:_Q%!16=70:_Q%!20=&301A:$(_Q%+24)=q$
  1731. !_Q%=EA%:_Q%!4=0:_Q%!8=-16:_Q%!&C=hD%:_Q%!16=90:_Q%!20=&1700210B:
  1732. _Q%!24&C:
  1733. _Q%!28
  1734. (q$)+2:$(_Q%!24)=H$:$(_Q%!28)="S"+q$:_Q%!32=&C
  1735. &400C2,,_Q%
  1736. shell_AttachMenu(-2,h%,k%,mB%,gB%,_B%):=h%
  1737. shell_IconbarSetText(y%,TF%,L$):
  1738. l%,s%:l%=
  1739. shell_HeapBlockFetch(40):s%=
  1740. shell_HeapBlockFetch(36):s%!20=0:
  1741. shell_OSCheckVersion(3)
  1742. y%=-1
  1743. !s%=-2
  1744. !s%=y%
  1745. &400CB,,s%
  1746. :!l%=y%:l%!4=TF%:
  1747. &400CE,,l%:$(l%!28)=L$:
  1748. &400D1,-1,l%!8-&64-s%!20,l%!&C,l%!16+&64-s%!20,l%!20:
  1749. shell_HeapBlockReturn(l%):
  1750. shell_HeapBlockReturn(s%):
  1751. shell_WritableIconHandler(b%,g%,LA%):
  1752. AB%,kB%,lB%,e%:
  1753. sC%,tC%,qA%,oA%,yA%,eF%,z%:z%=
  1754. shell_HeapBlockFetch(&400):
  1755. &400D3,,z%:
  1756. !z%=-1
  1757. shell_HeapBlockReturn(z%):=
  1758. &400D6,b%,z%,&40E000,&E000:kB%=!z%:e%=0:
  1759. z%!e%=g%
  1760. sC%=z%!(e%-4):tC%=z%!(e%+4)
  1761. :e%+=4:
  1762. z%!e%=-1:lB%=z%!(e%-4):
  1763. shell_FakeMouseClick(b%,0,4)
  1764. 398,394:
  1765. g%=lB%
  1766. &400D2,b%,kB%,-1,-1,-1,
  1767. shell_IconGetData(b%,kB%))
  1768. &400D2,b%,tC%,-1,-1,-1,
  1769. shell_IconGetData(b%,tC%))
  1770. 399,410:
  1771. g%=kB%
  1772. &400D2,b%,lB%,-1,-1,-1,
  1773. shell_IconGetData(b%,lB%))
  1774. &400D2,b%,sC%,-1,-1,-1,
  1775. shell_IconGetData(b%,sC%))
  1776. &400D2,b%,kB%,-1,-1,-1,
  1777. shell_IconGetData(b%,kB%))
  1778. &400D2,b%,lB%,-1,-1,-1,
  1779. shell_IconGetData(b%,lB%))
  1780. shell_HeapBlockReturn(z%):=
  1781. shell_FakeMouseClick(b%,g%,pC%):
  1782. 6,&F,1:_Q%!8=pC%:_Q%!&C=b%:_Q%!16=g%:
  1783. shell_Action(6):
  1784. shell_IconCreate(b%,sA%,dA%,hD%,y%,vC%,wC%,lE%,P$,nA%,ZB%,K$):
  1785. XF%,h%,hB%,l%:l%=
  1786. shell_HeapBlockFetch(40):l%!0=b%:l%!4=sA%:l%!8=dA%:l%!&C=sA%+hD%:l%!16=dA%+y%:l%!20=lE%
  1787. wC%<<28
  1788. vC%<<24:
  1789. l%!20
  1790. #XF%=
  1791. P$,","):l%!24=nA%:
  1792. K$<>""
  1793. 6hB%=
  1794. shell_HeapBlockFetch(
  1795. K$+1):$hB%=K$:l%!28=hB%
  1796. l%!28=-1
  1797. :l%!32=ZB%
  1798. $(l%+24)=
  1799. P$,&B)
  1800. &400C2,,l%
  1801. shell_HeapBlockReturn(l%):=h%
  1802. shell_IconDelete(b%,g%):
  1803. shell_DoIconDelete(b%,g%,
  1804. shell_IconDelete2(b%,g%):
  1805. shell_DoIconDelete(b%,g%,
  1806. shell_DoIconDelete(b%,g%,pE%):
  1807. a%,GA%,KA%,RA%,ZA%:a%=
  1808. shell_HeapBlockFetch(40):a%!0=b%:a%!4=g%:
  1809. &400CE,,a%:
  1810. "Interface_BoundingBox",,a%+8:GA%=a%!8:KA%=a%!&C:RA%=a%!16:ZA%=a%!20:
  1811. &400CE,,a%
  1812. shell_HeapBlockExists(a%!28)
  1813. shell_HeapBlockReturn(a%!28)
  1814. shell_HeapBlockExists(a%!32)
  1815. shell_HeapBlockReturn(a%!32)
  1816. &400C4,,a%:
  1817. &400D1,b%,GA%,KA%,RA%,ZA%
  1818. shell_HeapBlockReturn(a%):
  1819. shell_IconPutData(IA%,pA%,P$,I):
  1820. a%,PA$:PA$=
  1821. shell_IconGetData(IA%,pA%):
  1822. P$<>PA$
  1823. !Sa%=
  1824. shell_HeapBlockFetch(40):a%!0=IA%:a%!4=pA%:
  1825. &400CE,,a%:
  1826. (a%!24
  1827. (1<<8))<>0
  1828. P$>a%!36
  1829. shell_MessageNoArgs("SHELLMSG12")
  1830. $(a%!28)=P$
  1831. $(a%+28)=
  1832. P$,&B)
  1833. a%!8=0:a%!&C=0:
  1834. &400CD,,a%
  1835. shell_HeapBlockReturn(a%)
  1836. shell_IconPutDataNow(IA%,pA%,P$):
  1837. a%:a%=
  1838. shell_HeapBlockFetch(50):a%!0=IA%:a%!4=pA%:
  1839. &400CE,,a%:
  1840. (a%!24
  1841. (1<<8))<>0
  1842. P$>a%!36
  1843. shell_MessageNoArgs("SHELLMSG12")
  1844. $(a%!28)=P$
  1845. $(a%+28)=
  1846. P$,&B)
  1847. :a%!8=0:a%!&C=0:
  1848. &400CD,,a%:
  1849. shell_EnsurePoll:
  1850. shell_HeapBlockReturn(a%):
  1851. shell_IconNewSprite(IA%,pA%,VA$,I):
  1852. l%:l%=
  1853. shell_HeapBlockFetch(40):l%!0=IA%:l%!4=pA%:
  1854. &400CE,,l%:
  1855. &400C4,,l%:l%!4=l%!8:l%!8=l%!&C:l%!&C=l%!16:l%!16=l%!20:l%!20=l%!24:$(l%+24)=VA$:
  1856. &400C2,,l%
  1857. &400D1,l%!0,l%!4,l%!8,l%!&C,l%!16
  1858. shell_HeapBlockReturn(l%):=pA%
  1859. shell_IconGetData(IA%,pA%):
  1860. O$,l%:l%=
  1861. shell_HeapBlockFetch(40):l%!0=IA%:l%!4=pA%:
  1862. &400CE,,l%:
  1863. (l%!24
  1864. (1<<8))<>0
  1865. O$=$(l%!28)
  1866. O$=$(l%+28)
  1867. shell_HeapBlockReturn(l%):=O$
  1868. shell_IconMove2(b%,g%,_D%,AE%):
  1869. x%:x%=
  1870. shell_HeapBlockFetch(40):!x%=b%:x%!4=g%:
  1871. &400CE,,x%:x%!8+=_D%:x%!16+=_D%:x%!&C+=AE%:x%!20+=AE%:g%=
  1872. shell_IconMove(b%,g%,x%!8,x%!&C,x%!16,x%!20):
  1873. shell_HeapBlockReturn(x%):=g%
  1874. shell_IconResize(b%,g%,GA%,KA%,RA%,ZA%):=
  1875. shell_IconMove(b%,g%,GA%,KA%,RA%,ZA%)
  1876. shell_IconMove(b%,g%,GA%,KA%,RA%,ZA%):
  1877. n%,lF%,cF%,uA%,a%:
  1878. FE%,GE%,LE%,VE%:n%=
  1879. shell_HeapBlockFetch(40):a%=
  1880. shell_HeapBlockFetch(40):!n%=b%:n%!4=g%:
  1881. &400CE,,n%:!a%=b%:a%!4=g%:
  1882. &400CE,,a%:
  1883. "Interface_BoundingBox",,a%+8:_E%=n%!24:yC%=n%+28
  1884. FE%=_E%:GE%=yC%!0:LE%=yC%!4:VE%=yC%!8:uA%=n%!8-a%!8:
  1885. &400C4,,n%:
  1886. &400D1,!n%,n%!8-uA%,n%!&C-uA%,n%!16+uA%,n%!20+uA%:g%=
  1887. shell_CreateIcon2(b%,GA%,KA%,RA%,ZA%,FE%,GE%,LE%,VE%,uA%):
  1888. shell_HeapBlockReturn(n%):
  1889. shell_HeapBlockReturn(a%):=g%
  1890. shell_CreateIcon2(h%,GA%,KA%,RA%,ZA%,i%,AF%,CF%,DF%,uA%):
  1891. w%,FA%,H$,c$,sA%,dA%:FA%=
  1892. shell_HeapBlockFetch(60):!FA%=h%:FA%!20=i%:FA%!24=AF%:FA%!28=CF%:FA%!32=DF%:H$="":c$="":
  1893. 256H$=$(FA%!24)
  1894. H$=$(FA%+24)
  1895. shell_IconGetCommand(FA%!28,"S")
  1896. c$=$(FA%+24)
  1897. shell_GetMinXY(i%,H$,c$):
  1898. RA%-GA%<sA%
  1899. RA%=GA%+sA%
  1900. ZA%-KA%<dA%
  1901. ZA%=KA%+dA%
  1902. FA%!4=GA%:FA%!8=KA%:FA%!&C=RA%:FA%!16=ZA%:
  1903. &400C2,,FA%
  1904. &400D1,!FA%,FA%!4-uA%,FA%!8-uA%,FA%!&C+uA%,FA%!16+uA%:
  1905. &400D3,,FA%:
  1906. !FA%=h%:
  1907. FA%!4=w%:
  1908. &400D2,h%,w%,0,0,-1,0
  1909. shell_HeapBlockReturn(FA%):=w%
  1910. shell_GetMinXY(i%,H$,c$):
  1911. GA%,KA%,RA%,ZA%,oA%,yA%:sA%=0:dA%=0:
  1912. H$<>""
  1913. &40084,i%>>24
  1914. ,,KA%,,ZA%:
  1915. &40097,,
  1916. (i%>>24)+H$
  1917. ,GA%,,RA%:
  1918. &40088,,GA%
  1919. ,GA%:
  1920. &40088,,RA%
  1921. ,RA%:sA%=RA%-GA%:dA%=ZA%-KA%
  1922. sA%=6*pF%+16*
  1923. H$:dA%=32
  1924. 4dA%+=2*bF%
  1925. c$<>""
  1926. &2002E,296,
  1927. shell_UserSpritesBase,c$
  1928. ,,,oA%,yA%,,YE%;P%:
  1929. &20035,YE%,4
  1930. ,,JF%:oA%=oA%<<JF%:
  1931. &20035,YE%,5
  1932. ,,KF%:yA%=yA%<<KF%:
  1933. &800oA%=oA%/2:yA%=yA%/2
  1934. 539)=19oA%=sA%+oA%
  1935. oA%>sA%sA%=oA%
  1936. yA%>dA%dA%=yA%
  1937. shell_IconGetCommand(WC%,gA$):
  1938. I%,O$:
  1939. WC%<=0
  1940.     O$=""
  1941. shell_StringUpperCase($WC%),";"+
  1942. shell_StringUpperCase(gA$)):
  1943.     O$=""
  1944. $(WC%+I%),
  1945. $(WC%+I%)+";",";")-1)
  1946. shell_IconRedraw(b%,g%):
  1947. a%:a%=
  1948. shell_HeapBlockFetch(40):!a%=b%:a%!4=g%:
  1949. &400CE,,a%:
  1950. "Interface_BoundingBox",,a%+8:
  1951. &400D1,b%,a%!8,a%!&C,a%!16,a%!20:
  1952. shell_Action(
  1953. shell_Poll_I(0,_U%!&94)):
  1954. shell_HeapBlockReturn(a%):
  1955. shell_IconGetValidation(b%,g%):
  1956. a%,K$,i%:
  1957. g%=-1
  1958. VK$="":a%=
  1959. shell_HeapBlockFetch(&64):a%!0=b%:a%!4=g%:
  1960. &400CE,,a%:i%=a%!24:
  1961. a%!32>0
  1962. K$=$(a%!32)
  1963. shell_HeapBlockReturn(a%):=K$
  1964. shell_IconPutValidation(b%,g%,t$):
  1965. a%,i%:a%=
  1966. shell_HeapBlockFetch(&64):a%!0=b%:a%!4=g%:
  1967. &400CE,,a%:i%=a%!24:
  1968. $(a%!32)=t$
  1969. shell_HeapBlockReturn(a%):
  1970. shell_IsIconSelected(HB%,IB%):
  1971. shell_IconGetState(HB%,IB%):i%=_Q%!24:c%=(i%
  1972. &200000):
  1973. shell_IconSelect(HB%,IB%):
  1974. shell_IconSetState(HB%,IB%,&200000,&200000):
  1975. shell_IconDeselect(HB%,IB%):
  1976. shell_IconSetState(HB%,IB%,0,&200000):
  1977. shell_IconGetState(HB%,IB%):!_Q%=HB%:_Q%!4=IB%:
  1978. &400CE,,_Q%:
  1979. shell_IconSetSelected(b%,g%,WA%):
  1980. WA%=0
  1981. shell_IconDeselect(b%,g%)
  1982. shell_IconSelect(b%,g%)
  1983. shell_IconSet(b%,g%,WA%):
  1984. WA%=0
  1985. shell_IconDeselect(b%,g%)
  1986. shell_IconSelect(b%,g%)
  1987. shell_IconSetState(HB%,IB%,PF%,QF%):
  1988. l%:l%=
  1989. shell_HeapBlockFetch(16):!l%=HB%:l%!4=IB%:l%!8=PF%:l%!&C=QF%:
  1990. &400CD,,l%:
  1991. shell_HeapBlockReturn(l%):
  1992. shell_IconUnselectable(h%,zB%):
  1993. shell_IconSetState(h%,zB%,&400000,&40000):
  1994. shell_IconSetBGColour(b%,g%,aB%):
  1995. aB%<0
  1996. aB%>&F
  1997. shell_MessageOneArg("SHELLMSG24","PROCshell_IconSetBGColour")
  1998. shell_IconSetState(b%,g%,aB%<<28,&F0000000):
  1999. shell_IconSetFGColour(b%,g%,aB%):
  2000. aB%<0
  2001. aB%>&F
  2002. shell_MessageOneArg("SHELLMSG24","PROCshell_IconSetFGColour")
  2003. shell_IconSetState(b%,g%,aB%<<24,&F000000):
  2004. shell_CaretSetPosition(IA%,pA%,YF%,ZF%,QA%,qA%):
  2005. &400D2,IA%,pA%,YF%,ZF%,QA%,qA%:
  2006. shell_IconSetButtonType(b%,g%,AC%):
  2007. AC%=&C
  2008. AC%=&D
  2009. shell_MessageOneArg("SHELLMSG23","PROCshell_IconSetButtonType")
  2010. AC%<0
  2011. AC%>&F
  2012. shell_MessageOneArg("SHELLMSG22","PROCshell_IconSetButtonType")
  2013. shell_IconSetState(b%,g%,AC%<<&C,&F000):
  2014. shell_IconSetESG(b%,g%,nB%):
  2015. nB%<0
  2016. nB%>31
  2017. shell_MessageOneArg("SHELLMSG25","PROCshell_IconSetESG")
  2018. shell_IconSetState(b%,g%,nB%<<16,&1F0000):
  2019. shell_IconSetText(b%,g%,AA%):
  2020. AA%<>0
  2021. AA%=1<<0
  2022. shell_IconSetState(b%,g%,AA%,1<<0):
  2023. shell_IconSetSprite(b%,g%,AA%):
  2024. AA%<>0
  2025. AA%=1<<1
  2026. shell_IconSetState(b%,g%,AA%,1<<1):
  2027. shell_IconSetBorder(b%,g%,AA%):
  2028. AA%<>0
  2029. AA%=1<<2
  2030. shell_IconSetState(b%,g%,AA%,1<<2):
  2031. shell_IconSetHCentred(b%,g%,AA%):
  2032. shell_IconSetState(b%,g%,0,1<<9):
  2033. AA%<>0
  2034. AA%=1<<3
  2035. shell_IconSetState(b%,g%,AA%,1<<3):
  2036. shell_IconSetVCentred(b%,g%,AA%):
  2037. AA%<>0
  2038. AA%=1<<4
  2039. shell_IconSetState(b%,g%,AA%,1<<4):
  2040. shell_IconSetFilled(b%,g%,AA%):
  2041. AA%<>0
  2042. AA%=1<<5
  2043. shell_IconSetState(b%,g%,AA%,1<<5):
  2044. shell_IconSetRightJust(b%,g%,AA%):
  2045. shell_IconSetHCentred(b%,g%,0):
  2046. AA%<>0
  2047. AA%=1<<9
  2048. shell_IconSetState(b%,g%,AA%,1<<9):
  2049. shell_IconSetLeftJust(b%,g%):
  2050. shell_IconSetHCentred(b%,g%,0):
  2051. shell_IconSetRightJust(b%,g%,0):
  2052. shell_IconSetUnselectable(b%,g%,WA%):
  2053. WA%<>0
  2054. WA%=1<<22
  2055. shell_IconSetState(b%,g%,WA%,1<<22):
  2056. WA%<>0
  2057. shell_HeapBlockFetch(24):
  2058. &400D3,,z%:
  2059. !z%=b%
  2060. z%!4=g%
  2061. &400D2,-1
  2062. shell_HeapBlockReturn(z%)
  2063. shell_CaretSetRight(b%,g%):
  2064. &400D2,b%,g%,-1,-1,-1,
  2065. shell_IconGetData(b%,g%)):
  2066. print_text(F,G,H$):
  2067. in(F,G-32,F+16*
  2068. (H$),G)
  2069. in(A%,B%,C%,D%):
  2070. newvals:Y=_Q%!28:Q=_Q%!32:Z=_Q%!36:P=_Q%!40:T=_Q%!4:V=_Q%!8:U=_Q%!&C:O=_Q%!16:K=_Q%!20:L=_Q%!24:R=U-T:S=O-V:d=K:e=K+R:f=L:b=L-S:
  2071. max(DA%,eA%):
  2072. DA%<eA%
  2073. shell_Leaf(G$):
  2074. G$,"."):G$=
  2075. G$,".")+1):
  2076. shell_Branch(e$):
  2077. EA%,v$,c%:
  2078. e$,".")=0
  2079.     v$=""
  2080. c%=0:
  2081. :EA%=c%+1:c%=
  2082. e$,".",EA%):
  2083. c%=0:v$=
  2084. e$,EA%-2)
  2085. gname(C):w$="":
  2086. ?C<>0
  2087. ?C<>&D:w$=w$+
  2088. ?C:C+=1:
  2089. shell_WindowResize(IA%,zE%,aF%,rE%,uE%,ZC%):!_Q%=zE%:_Q%!4=aF%:_Q%!8=rE%:_Q%!&C=uE%:
  2090. &400D7,IA%,_Q%:
  2091. )_Q%!0=IA%:
  2092. &400CC,,_Q%:
  2093. &400C5,,_Q%
  2094. shell_WindowRetitle(
  2095. IA%,R$):
  2096. c%,p%,h%,pD%:p%=
  2097. shell_HeapBlockFetch(&64+(
  2098. shell_WindowCountIcons(IA%)*32)):p%!0=IA%:
  2099. &400CC,,p%:
  2100. ((p%!60)
  2101. 256)=0
  2102. )Ac%=p%+76:$c%=
  2103. R$,&B):
  2104. &400C3,,p%:
  2105. &400C1,,p%+4
  2106. h%<>IA%
  2107. shell_UpdateWindowHandle(IA%,h%):IA%=h%
  2108. pD%=p%!84:$(!(p%+76))=
  2109. R$,pD%-1):
  2110. ((p%!32)
  2111. (1<<16))<>0
  2112. &400D1,-1,p%!4,p%!16,p%!&C,p%!16+44
  2113. shell_HeapBlockReturn(p%)
  2114. shell_WindowTitleIndirected(CC%):
  2115. (1<<8))=(1<<8)
  2116. shell_ScreenToWindowCoords(qD%,
  2117. BD%,rD%,kF%,sD%,tD%,bB%:bB%=
  2118. shell_HeapBlockFetch(&64+(
  2119. shell_WindowCountIcons(qD%)*32)):BD%=bB%:!BD%=qD%:
  2120. &400CC,,BD%:rD%=bB%!4:GF%=bB%!16:sD%=bB%!20:tD%=bB%!24:X%=X%+(sD%-rD%):Y%=Y%+(tD%-GF%)
  2121. shell_HeapBlockReturn(bB%):
  2122. shell_WimpSlotReadEnd:
  2123. &400EC,-1,-1
  2124. oB%:=oB%
  2125. shell_WimpSlotClaimMemory(oB%,bA%):
  2126. &400EC,oB%+bA%,-1
  2127. CD%<oB%+bA%
  2128. shell_WimpSlotReleaseMemory:
  2129. &400EC,oB%,-1:
  2130. shell_MouseLimit(A,IA%):A!0=IA%:
  2131. &400CB,,A:
  2132. mouse_rectangle(A!4,A!8,A!&C-A!4,A!16-A!8):
  2133. shell_NameOfFirstSprite(WA$):
  2134. X%,N%,x$:X%=
  2135. (WA$):
  2136. #X%=4:N%=
  2137. #X%:N%+=
  2138. #X%*256:N%+=
  2139. #X%*65536:N%+=
  2140. #X%*&1000000:
  2141. #X%=N%:x$="":
  2142. &B:x$+=
  2143. #X%):
  2144. #X%:=x$
  2145. InitialiseSpriteArea(S%,SF%):!S%=SF%:S%!8=16:
  2146. 46,9+256,S%:
  2147. shell_ListEvents(b%,w%):
  2148. k%,a$:
  2149. b%=-1
  2150. b%=-2
  2151. shell_Tracef0("MenuSelection="+
  2152. shell_GetEventHandler(b%,w%,0)):
  2153. shell_Tracef0("MenuMaker    ="+
  2154. shell_GetEventHandler(b%,w%,1)):
  2155. shell_Tracef0("ClickSelect  ="+
  2156. shell_GetEventHandler(b%,w%,2))
  2157. shell_Tracef0("ClickAdjust  ="+
  2158. shell_GetEventHandler(b%,w%,3)):
  2159. shell_Tracef0("Redraw       ="+
  2160. shell_GetEventHandler(b%,w%,4)):
  2161. shell_Tracef0("Keypress     ="+
  2162. shell_GetEventHandler(b%,w%,5))
  2163. shell_Tracef0("Drag         ="+
  2164. shell_GetEventHandler(b%,w%,6)):
  2165. shell_Tracef0("Menu Warning ="+
  2166. shell_GetEventHandler(b%,w%,7)):
  2167. shell_Tracef0("HelpTag      ="+
  2168. shell_GetEventHandler(b%,w%,8)):k%=
  2169. shell_GetEventMenu(2,b%,w%):
  2170. a$="None"
  2171. shell_Tracef0("Menu handle =&"+a$):
  2172. shell_HeapManagerInit(G$,VF%):
  2173. _heap_code%900:
  2174. ("LOAD "+G$+"heapcode "+
  2175. ~_heap_code%):
  2176. _heap_code%+0,VF%:
  2177. shell_HeapBlockExists(nA%):
  2178. nA%<&8000
  2179. 99,"No heapblock defined at this address"
  2180. shell_HeapBlockInfo(nA%):
  2181. shell_HeapBlockExtend(DA%,eA%):
  2182. _heap_code%+&C,DA%,eA%:=DA%
  2183. shell_HeapBlockFetch(DA%):
  2184. _heap_code%+4,nA%,DA%:=nA%
  2185. shell_HeapBlockReturn(
  2186. DA%):
  2187. shell_HeapBlockExists(DA%)
  2188. _heap_code%+8,DA%
  2189. DA%=0:
  2190. shell_HeapBlockInfo(DA%):
  2191. 29,6,!(_heap_code%+28),DA%
  2192. ,,,M:=M
  2193. shell_OSVarExists(KB%,y$):
  2194. &20023,y$,KB%,-1,0,0
  2195. shell_OSVarGetVal(KB%,bA%,y$,W):
  2196. z$,B,WF%:
  2197. &20023,y$,KB%,bA%,0,-3*(W=
  2198. ,,B,WF%,u%:
  2199. B-1:z$=z$+
  2200. (KB%?r%):
  2201. r%:=z$
  2202. shell_OSReadCommandArg(X):
  2203. DD%,T$,d%:T$="":d%=0:
  2204. DD%?d%<>0:T$+=
  2205. (DD%?d%):d%+=1:
  2206. 1:T$=
  2207. 34)+1):T$=
  2208. 34)+2)
  2209. shell_StringStripTrailing(B$,U$):
  2210. B$,1)=U$:B$=
  2211. (B$)-1):
  2212. shell_StringStripLeading(B$,U$):
  2213. B$,1)=U$:B$=
  2214. B$,2):
  2215. shell_StringStripAll(B$,U$):
  2216. D,E:D=
  2217. B$,U$):
  2218. B$,E-1)+
  2219. B$,E+1)
  2220. D:=B$
  2221. shell_StringPadTrailing(B$,U$,vA%):
  2222. (B$)<vA%:B$=B$+
  2223. (B$),U$):
  2224. shell_StringPadLeading(B$,U$,vA%):
  2225. (B$)<vA%:B$=
  2226. (B$),U$)+B$:
  2227. shell_StringUpperCase(B$):
  2228. (B$)>0
  2229. (B$):
  2230. B$,r%,1)>="a"
  2231. B$,r%,1)<="z"
  2232. B$,r%,1)=
  2233. B$,r%,1))
  2234. shell_StringExchange(B$,BA$,dA$):
  2235. B$,BA$)
  2236. S0qA%=
  2237. B$,BA$):B$=
  2238. B$,qA%-1)+dA$+
  2239. B$,qA%+
  2240. shell_StringArrayGetLongest(A$(),aC%):
  2241. r%,bC%:bC%=0:
  2242. (A$(r%))>bC%
  2243. (A$(r%))
  2244. r%:=bC%
  2245. mem_to_string(wD%,d%,nE%):
  2246. wD%?d%<>nE%:B$+=
  2247. (wD%?d%):d%+=1:
  2248. shell_FileLength(Z$):
  2249. u%,YC%,fC%,vA%,pB%,B$:
  2250. 8,5,Z$
  2251. u%,,YC%,fC%,vA%,pB%:=vA%
  2252. shell_TraceOn:_U%!&64=_U%!&64
  2253. 1<<9:
  2254. shell_BroadcastMessage(&43B00,"ShellDBug:TraceOn"):
  2255. shell_TraceOff:
  2256. (_U%!&64
  2257. (1<<9))
  2258. _U%!&64=_U%!&64
  2259. (1<<9)
  2260. shell_BroadcastMessage(&43B00,"ShellDBug:TraceOff"):
  2261. shell_TraceInit(h$):
  2262. JA%,a%,E$,D$:
  2263. h$<>""
  2264. (h$):_U%!44=JA%
  2265. shell_HeapBlockFetch(256):D$=
  2266. shell_OSVarGetVal(a%,256,"Obey$Dir",1):E$=
  2267. shell_Leaf(D$),2):
  2268. shell_BroadcastMessage(&43B00,"ShellDBug:Init Debug messages from "+E$):
  2269. shell_HeapBlockReturn(a%):
  2270. _U%!&64
  2271. _U%!&64=(_U%!&64
  2272. 1<<4)
  2273. shell_TraceIsOn:
  2274. _U%!&64
  2275. (1<<9)
  2276. shell_Tracef0(KA$):
  2277. shell_TraceIsOn)
  2278. _U%!44<>-1
  2279. JA%=_U%!44:
  2280. #JA%,KA$
  2281. _U%!&94>0
  2282. shell_BroadcastMessage(&43B00,"ShellDBug:Trace "+KA$)
  2283. shell_Tracef2(nA%):
  2284. ("MEDIT "+
  2285. ~nA%):
  2286. shell_TraceExit:
  2287. _U%!44<>-1
  2288. #(_U%!44):_U%!44=-1
  2289. shell_AttachHotKey(LA$,mB%,gB%,_B%,M$,b%,S$,X$):
  2290. v%,d%,c%,_%,LA%,FD%:FD%=
  2291. _U%!60=0
  2292. 3_U%!60=
  2293. shell_HeapBlockFetch(24):d%=0:_U%!&B4=1
  2294. d%=_U%!&B4*24:_U%!60=
  2295. shell_HeapBlockExtend(_U%!60,24):_U%!&B4=(_U%!&B4)+1
  2296. :v%=_U%!60:
  2297. "F1":LA%=385
  2298. "F2":LA%=386
  2299. "F3":LA%=387
  2300. "F4":LA%=388
  2301. "F5":LA%=389
  2302. "F6":LA%=390
  2303. "F7":LA%=391
  2304. "F8":LA%=392
  2305. "F9":LA%=393
  2306. "F10":LA%=458
  2307. "F11":LA%=459
  2308. LA%=(
  2309. LA$)-64:FD%=
  2310. LA%+=16
  2311. LA%+=32
  2312. :c%=v%+d%:c%!0=LA%:c%?4=mB%:c%?5=gB%:c%?6=_B%:c%!8=
  2313. shell_HeapBlockFetch(
  2314. M$+1):_%=c%!8:$_%=M$:
  2315. shell_SearchStatic(_U%!&B8,b%):
  2316. d%=-1
  2317. shell_MessageNoArgs("SHELLMSG09")
  2318. :c%!&C=b%:c%!16=
  2319. shell_HeapBlockFetch(
  2320. S$+1):_%=c%!16:$_%=S$:c%!20=
  2321. shell_HeapBlockFetch(
  2322. X$+1):_%=c%!20:$_%=X$:
  2323. shell_HotKeyProcess(LA%):
  2324. v%,q%,m%,f%,y%,i$,S$,X$:
  2325. gB%,mB%,_B%,rA%,tA%,CC%,nF%,d%:
  2326. BA%,p%:v%=_U%!60:q%=_U%!&B4*24:m%=
  2327. :f%=0:
  2328. v%!f%=LA%
  2329. f%+=24
  2330. f%>=q%:
  2331. dc%=v%+f%:i$=$(c%!8):
  2332. shell_Tracef0("HotKeyProcess:Template name is '"+i$+"'"):
  2333. (i$<>""
  2334. c%!&C=0)
  2335. shell_CreateWindow(i$,y%):
  2336. shell_Tracef0("HotKeyProcess:Creating new dynamic window (handle is &"+
  2337. ~y%+")"):p%=
  2338. shell_HeapBlockFetch(36):p%!0=y%:
  2339. &400CB,,p%:rA%=(p%!4-p%!&C)/2:tA%=(p%!16-p%!8)/2:
  2340. shell_HeapBlockReturn(p%)
  2341. :S$=$(c%!16):
  2342. S$<>""
  2343. shell_Tracef0("HotKeyProcess:Calling Pre-Open FN '"+S$+"'"):
  2344. c%!&C>0
  2345. % o%=
  2346. ("FN"+S$+"("+
  2347. c%!&C+")")
  2348. ("FN"+S$+"("+
  2349. y%+")")
  2350. shell_Tracef0("HotKeyProcess:No Pre-Open FN registered")
  2351. shell_SearchStatic(_U%!&B8,c%!&C):
  2352. d%>-1
  2353. shell_OpenWindowStatic(c%!&C)
  2354. c%!&C>0
  2355. shell_MessageNoArgs("SHELLMSG09")
  2356. shell_OpenWindowDynamic(y%,rA%,tA%)
  2357. :X$=$(c%!20):
  2358. X$<>""
  2359. shell_Tracef0("HotKeyProcess:Calling Post-Open FN '"+X$+"'"):
  2360. c%!&C>0
  2361. A o%=
  2362. ("FN"+S$+"("+
  2363. c%!&C+")")
  2364. ("FN"+X$+"("+
  2365. y%+")")
  2366. shell_Tracef0("HotKeyProcess:No Post-Open FN registered")
  2367. :BA%=
  2368. i$="":S$="":X$="":BA%=
  2369. :=BA%
  2370. shell_WindowCentreOnPointer(y%):
  2371. s%,BC%,rA%,tA%:BC%=
  2372. shell_HeapBlockFetch(20):
  2373. &400CF,,BC%:p%=
  2374. shell_HeapBlockFetch(36):p%!0=y%:
  2375. &400CB,,p%:rA%=(p%!4-p%!&C)/2:tA%=(p%!16-p%!8)/2:
  2376. shell_WindowMoveTo(y%,BC%!0+rA%,BC%!4-tA%)
  2377. shell_HeapBlockReturn(p%):
  2378. shell_HeapBlockReturn(BC%):
  2379. shell_WindowCentreOnScreen(y%):
  2380. s%,dC%,eC%,mA%,QA%,LC%,cB%:
  2381. &20035,-1,4
  2382. ,,LC%:
  2383. &20035,-1,5
  2384. ,,cB%:
  2385. &20035,-1,&B
  2386. ,,dC%:
  2387. &20035,-1,&C
  2388. ,,eC%:dC%=dC%<<LC%:eC%=eC%<<cB%:p%=
  2389. shell_HeapBlockFetch(36):p%!0=y%:
  2390. &400CB,,p%:mA%=(p%!&C-p%!4)
  2391. peQA%=(p%!16-p%!8):
  2392. shell_WindowMoveTo(y%,(dC%/2)-(mA%/2),(eC%-QA%)/2):
  2393. shell_HeapBlockReturn(p%):
  2394. shell_OpenWindowStaticNewView(b%):
  2395. shell_OpenWindow(b%,
  2396. ,-1):
  2397. shell_OpenWindowStatic(h%):
  2398. shell_SearchStatic(_U%!&B8,h%)>-1
  2399. shell_OpenWindow(h%,0,-1)
  2400. shell_SearchStatic(aA%,h%):
  2401. m%,e%:m%=-1:e%=0:
  2402. aA%<>0
  2403. aA%!e%<>-1:
  2404. aA%!e%=h%
  2405. m%=e%:=m%
  2406. :e%+=4:
  2407. shell_CreateWindowStatic(CA$,
  2408. WB%,aA%,c%,d%:WB%=
  2409. shell_GetWB(CA$):WB%!64=_U%!16:
  2410. &400C1,,WB%
  2411. h%:aA%=_U%!&B8:
  2412. aA%=0
  2413. shell_Tracef0("CreateWindowStatic:Empty List"):_U%!&B8=
  2414. shell_HeapBlockFetch(8):aA%=_U%!&B8:aA%!0=h%:aA%!4=-1
  2415. shell_Tracef0("CreateWindowStatic:Searching for window handle"):d%=
  2416. shell_SearchStatic(_U%!&B8,h%):
  2417. d%=-1
  2418. shell_Tracef0("CreateWindowStatic:Not found - adding window handle to list"):d%=
  2419. shell_SearchStatic(_U%!&B8,0):
  2420. d%=-1
  2421. shell_Tracef0("CreateWindowStatic:Extending window handle list"):e%=0:
  2422. aA%!e%<>-1:e%+=4:
  2423. :_U%!&B8=
  2424. shell_HeapBlockExtend(_U%!&B8,4):aA%=_U%!&B8
  2425. shell_Tracef0("CreateWindowStatic:Found unused space in list"):e%=d%
  2426. :c%=aA%+e%:c%!0=h%:c%!4=-1
  2427. shell_InitHelpSystem(G$,xE%):
  2428. DA$,EA%,hA%,Y$,HD%,NB%:_U%!&D4=0:
  2429. _U%!&D8<>0
  2430. shell_HeapBlockReturn(_U%!&D8)
  2431. @_U%!&D8=0:
  2432. shell_ScanForHelp:
  2433. DA$=" -DieWithTask"
  2434. DA$=""
  2435. _U%!&64
  2436. G$="":hA%=
  2437. shell_HeapBlockFetch(256):Y$=
  2438. shell_OSVarGetVal(hA%,256,
  2439. shell_GetAppName+"Res$Path",-1):
  2440. shell_HeapBlockReturn(hA%):
  2441. :EA%=
  2442. Y$,","):
  2443. EA%>0
  2444. shell_FileExists(
  2445. Y$,EA%-1)+
  2446. shell_GetAppName)
  2447. Y$,EA%-1)+
  2448. shell_GetAppName:
  2449. shell_StrongHlpChkFiles(G$)
  2450. Y$,EA%+1)
  2451. shell_FileExists(Y$+
  2452. shell_GetAppName)
  2453. ?G$=Y$+
  2454. shell_GetAppName:
  2455. shell_StrongHlpChkFiles(G$)
  2456. shell_OK(
  2457. shell_MessageOneArg("SHELLMSG26",
  2458. shell_GetAppName))
  2459. G$<>""
  2460. shell_FileExists(G$)
  2461. shell_StrongHlpChkFiles(G$)
  2462. shell_MessageOneArg("SHELLMSG33",G$)
  2463. NB%=0
  2464. shell_StrongHlpMsg("Help_Install "+G$+DA$):_U%!&64=_U%!&64
  2465. shell_HelpWord(EA$):
  2466. oF%,c%,CA%:CA%=
  2467. shell_HeapBlockFetch(512):
  2468. _U%!&D0=-1
  2469. shell_OSVarExists(CA%,"StrongHelp$Dir")
  2470. &600DE,"<StrongHelp$Dir>":
  2471. _U%!&D8<>0
  2472. shell_HeapBlockReturn(_U%!&D8)
  2473. <_U%!&D8=
  2474. shell_HeapBlockFetch(
  2475. EA$+1):c%=_U%!&D8:$c%=EA$
  2476. shell_HeapBlockReturn(CA%):
  2477. shell_OK(
  2478. shell_MessageNoArgs("SHELLMSG11"))
  2479. shell_StrongHlpMsg("Help_Word "+EA$)
  2480. shell_HeapBlockReturn(CA%):
  2481. shell_StrongHlpMsg(n$):
  2482. shell_BroadcastMessage(&43B00,n$):
  2483. shell_ScanForHelp:
  2484. JB%,gC%:JB%=
  2485. shell_HeapBlockFetch(256):
  2486. :JB%!&C=0:
  2487. &400E7,19,JB%,-2,_U%!&D4
  2488. ,,gC%:_U%!&D4=_U%!&D4+1:
  2489. gC%<>-1
  2490. (_U%!&D4)>64:
  2491. gC%<>-1
  2492. 9@JB%!0=24:JB%!&C=0:JB%!16=&400C6:JB%!20=gC%:
  2493. &400E7,17,JB%,0
  2494. shell_HeapBlockReturn(JB%):
  2495. shell_BroadcastMessage(IF%,n$):
  2496. x%,KD%:KD%=(
  2497. n$+30)
  2498. 3:x%=
  2499. shell_HeapBlockFetch(KD%):x%!&C=0:x%!16=IF%:$(x%+20)=n$+
  2500. (0):x%!0=KD%:
  2501. &600E7,17,x%,0:
  2502. shell_HeapBlockReturn(x%):
  2503. shell_WindowToggleBackIcon(
  2504. shell_WindowToggleFlags(b%,1<<24):
  2505. shell_WindowToggleCloseIcon(
  2506. shell_WindowToggleFlags(b%,1<<25):
  2507. shell_WindowToggleTitleBar(
  2508. shell_WindowToggleFlags(b%,1<<26):
  2509. shell_WindowToggleToggleIcon(
  2510. shell_WindowToggleFlags(b%,1<<27):
  2511. shell_WindowToggleHScrollBar(
  2512. shell_WindowToggleFlags(b%,1<<30):
  2513. shell_WindowToggleAdjustSizeIcon(
  2514. shell_WindowToggleFlags(b%,1<<29):
  2515. shell_WindowToggleVScrollBar(
  2516. shell_WindowToggleFlags(b%,1<<28):
  2517. shell_WindowToggleFlags(
  2518. b%,rB%):
  2519. a%,i%,ZC%,h%:
  2520. shell_Tracef0("WindowToggleFlags:wh%=&"+
  2521. ~b%):ZC%=
  2522. shell_WindowIsOpen(b%):a%=
  2523. shell_HeapBlockFetch(&64+(
  2524. shell_WindowCountIcons(b%)*32)):a%!0=b%:
  2525. &400CC,,a%:i%=a%!32:i%=(i%
  2526. rB%):a%!32=i%:
  2527. &400C3,,a%
  2528. &400C1,,a%+4
  2529. h%:!a%=h%:
  2530. &400C5,,a%
  2531. shell_HeapBlockReturn(a%):
  2532. h%<>b%
  2533. shell_UpdateWindowHandle(b%,h%):b%=h%
  2534. shell_ListClickSelect:
  2535. v%,f%,q%,c%,_%:v%=_U%!&C:q%=
  2536. shell_HeapBlockInfo(v%):
  2537. shell_Tracef0(" "):
  2538. shell_Tracef0("List of ClickSelect events:"):f%=0:
  2539. :c%=v%!(f%+20):_%=v%+f%:
  2540. shell_HeapBlockExists(c%)
  2541. $c%<>""
  2542. shell_Tracef0("&"+
  2543. shell_StringPadTrailing(
  2544. ~_%!0," ",8)+" &"+
  2545. shell_StringPadTrailing(
  2546. ~_%!4," ",8)+"   "+$c%)
  2547. :f%+=48:
  2548. (f%>=q%):
  2549. shell_Tracef0(" "):
  2550. shell_ListClickAdjust:
  2551. v%,f%,q%,c%,_%:v%=_U%!&C:q%=
  2552. shell_HeapBlockInfo(v%):
  2553. shell_Tracef0(" "):
  2554. shell_Tracef0("List of ClickAdjust events:"):f%=0:
  2555. :c%=v%!(f%+24):_%=v%+f%:
  2556. shell_HeapBlockExists(c%)
  2557. $c%<>""
  2558. shell_Tracef0("&"+
  2559. shell_StringPadTrailing(
  2560. ~_%!0," ",8)+" &"+
  2561. shell_StringPadTrailing(
  2562. ~_%!4," ",8)+"   "+$c%)
  2563. :f%+=48:
  2564. (f%>=q%):
  2565. shell_Tracef0(" "):
  2566. shell_ListHelpTags:
  2567. v%,f%,q%,c%,_%:v%=_U%!&C:q%=
  2568. shell_HeapBlockInfo(v%):
  2569. shell_Tracef0(" "):
  2570. shell_Tracef0("List of attached help tags:"):f%=0:
  2571. :c%=v%!(f%+44):_%=v%+f%:
  2572. shell_HeapBlockExists(c%)
  2573. $c%<>""
  2574. shell_Tracef0("&"+
  2575. shell_StringPadTrailing(
  2576. ~_%!0," ",8)+" &"+
  2577. shell_StringPadTrailing(
  2578. ~_%!4," ",8)+"   "+$c%)
  2579. :f%+=48:
  2580. (f%>=q%):
  2581. shell_Tracef0(" "):
  2582. shell_MemFill(DC%,DE%,EE%):
  2583. I%,hC%,ND%:hC%=DE%
  2584. 4:ND%=DE%
  2585. hC%>0
  2586. (hC%*4)
  2587. 4:DC%!(I%-1)=EE%:
  2588. ND%>0
  2589. .DC%=DC%+(hC%*4):
  2590. ND%-1:DC%?I%=EE%:
  2591. shell_AttachFontMenu(b%,g%,J$,OA$):
  2592. shell_FontMenuInit:
  2593. "FontMenu_Select",""+
  2594. 0,_U%!260
  2595. ,k%:_U%!&FC=k%:
  2596. shell_EventAdd(b%,g%,0,-2,J$):
  2597. shell_Tracef0("AttachFontMenu:Attaching font menu"):
  2598. OA$<>""
  2599. shell_AttachMenuMaker(b%,g%,OA$)
  2600. shell_AttachFontSubMenu(CB%,C$,J$):
  2601. iF%,k%,c%,e%:
  2602. shell_FontMenuInit:
  2603. "FontMenu_Select",""+
  2604. 0,_U%!260
  2605. &45BCE,CB%,k%:
  2606. &45BCC,,
  2607. :_U%!&FC=k%:
  2608. shell_EventListMenuWarn(CB%,k%,C$,J$):
  2609. shell_Tracef0("AttachFontSubMenu:Attaching font menu &"+
  2610. ~k%):
  2611. shell_FontMenuInit:
  2612. ("RMEnsure FontMenu 1.16 RMLoad <EvntShellSystem$Path>FontMenu"):
  2613. ("RMEnsure FontMenu 1.16 Error Couldn't load FontMenu module"):
  2614. _U%!&F0=-1
  2615. "FontMenu_Create"
  2616. _U%!&F0
  2617. shell_FontMenuSelectFont("",
  2618. shell_FontMenuSelectFont(o$,OD%):
  2619. c%,_A%:
  2620. shell_HeapBlockExists(_U%!&F4)
  2621. shell_HeapBlockReturn(_U%!&F4)
  2622. 7H_U%!&F4=
  2623. shell_HeapBlockFetch(
  2624. o$+1):c%=_U%!&F4:$c%=o$:
  2625. OD%<>0
  2626. OD%=1
  2627. :B_U%!260=OD%:
  2628. "FontMenu_Select",o$,_U%!260
  2629. ,_A%:
  2630. _A%<>_U%!&FC
  2631. shell_FontMenuUpdatePtr(_A%):_U%!&FC=_A%
  2632. shell_Tracef0("FontMenuSelectFont:Font is '"+o$+"'"):
  2633. shell_FontMenuGetLastSelectedFont:
  2634. shell_HeapBlockExists(_U%!&F4)
  2635. c%=_U%!&F4:=$c%
  2636. shell_FontMenuUpdatePtr(f%):
  2637. v%,e%:
  2638. shell_Tracef0("FontMenuUpdatePtr:Started.."):
  2639. shell_HeapBlockExists(_U%!&DC)
  2640. shell_Tracef0("FontMenuUpdatePtr:HeapBlock found.."):v%=_U%!&DC:e%=0:
  2641. shell_Tracef0("FontMenuUpdatePtr:Substituting ptr.."):v%!(e%+8)=f%:e%+=&C:
  2642. v%!e%=-1
  2643. shell_MenuUpdateHandle(HE%,IE%):
  2644. q%,f%,j%,k%:q%=
  2645. shell_HeapBlockInfo(_U%!&C)-8:f%=0:m%=
  2646. :j%=_U%!&C:
  2647. :k%=j%!(f%+8):
  2648. k%=HE%
  2649. j%!(f%+8)=IE%
  2650. p+f%+=48:
  2651. (f%>=q%):
  2652. _U%!24=HE%
  2653. _U%!24=IE%
  2654. shell_FindFont(
  2655. b$,iC%,jC%,
  2656. PD%):
  2657. shell_FontIsAvailable(b$,iC%,jC%)
  2658. b$="Trinity.Medium"
  2659. &40081,,b$,iC%*16,jC%*16,0,0
  2660. shell_FontIsAvailable(b$,iC%,jC%):
  2661. &40081,0,b$,iC%*16,jC%*16,0,0
  2662. &40082,PD%:=
  2663. shell_CheckSelection(mE%):
  2664. c%,e%:c%=_U%!256:
  2665. _U%!24=_U%!&FC
  2666. mE%!e%<>c%!e%
  2667. e%+=4:
  2668. c%!e%=-1:=e%
  2669. shell_MenuGetItemAddress(k%,ME%):
  2670. e%,VB%:
  2671. &45BC7,k%
  2672. :VB%=k%+28+((ME%!e%)*24):k%=VB%!4:e%+=4:
  2673. ME%!e%=-1:=VB%
  2674. shell_GetLastMouseXPos:=_U%!272
  2675. shell_GetLastMouseYPos:=_U%!276
  2676. shell_UpdateWindowHandle(SA%,MA%):
  2677. shell_Tracef0("UpdateWindowHandle:Updating stored window handles"):
  2678. shell_Tracef0("UpdateWindowHandle:old handle=&"+
  2679. ~SA%):
  2680. shell_Tracef0("UpdateWindowHandle:new handle=&"+
  2681. ~MA%):
  2682. MA%<>SA%
  2683. _U%!28=SA%
  2684. _U%!28=MA%
  2685. shell_FixEventBlock(SA%,MA%,_U%!&C,48):
  2686. shell_FixEventBlock(SA%,MA%,_U%!96,16):
  2687. shell_FixEventBlock(SA%,MA%,_U%!72,24):
  2688. shell_FixEventBlock(SA%,MA%,_U%!92,24):
  2689. shell_FixEventBlock(SA%,MA%,_U%!&68,16):
  2690. shell_UpdateStaticWindows(SA%,MA%)
  2691. shell_UpdateStaticWindows(SA%,MA%):
  2692. d%,aA%:
  2693. shell_Tracef0("UpdateStaticWindows:Correcting static window list.."):aA%=_U%!&B8:d%=
  2694. shell_SearchStatic(_U%!&B8,SA%):aA%!d%=MA%:
  2695. shell_FixEventBlock(SA%,MA%,j%,d%):
  2696. f%,q%:
  2697. shell_HeapBlockExists(j%)
  2698. shell_HeapBlockInfo(j%)-8:
  2699. (j%!f%=SA%)
  2700. j%!f%=MA%
  2701. :f%+=d%:
  2702. (f%>=q%)
  2703. shell_IconSelectAll(b%):
  2704. a%,I%:a%=
  2705. shell_HeapBlockFetch(&7D0):I%=a%+64:!a%=b%:a%!8=1<<21:a%!&C=1<<21:
  2706. &400D6,!a%,I%,5<<21,0<<21:
  2707. !I%>-1:a%!4=!I%:
  2708. &400CD,,a%:I%+=4:
  2709. shell_HeapBlockReturn(a%):
  2710. shell_IconDeselectAll(b%):
  2711. a%,I%:a%=
  2712. shell_HeapBlockFetch(&7D0):I%=a%+64:!a%=b%:a%!8=0:a%!&C=1<<21:
  2713. &400D6,!a%,I%,5<<21,1<<21:
  2714. !I%>-1:a%!4=!I%:
  2715. &400CD,,a%:I%+=4:
  2716. shell_HeapBlockReturn(a%):
  2717. shell_Message_SaveDesktop(Q%):
  2718. GA$:GA$="Run "+
  2719. shell_GetAppDir+
  2720. &C,2,Q%!20,GA$,
  2721. shell_MessagesInit(F$,
  2722. NE%):
  2723. bA%,i%:
  2724. 3,"Cannot open message file '"+F$+"'"
  2725. &41500,,F$
  2726. i%,,bA%:
  2727. NE%=0
  2728. shell_HeapBlockFetch(bA%)
  2729. 30,6,,,17+
  2730. ,,kC%:$(kC%+16)=F$:
  2731. &41501,kC%,kC%+16:
  2732. shell_Tracef0("MessagesInit:Message resource file '"+F$+"' loaded"):
  2733. shell_PrinterOnLine:
  2734. OE%,PE%:OE%=
  2735. (-4):
  2736. 2,1,0,1,0,1,0:
  2737. >30:PE%=
  2738. (-4)<OE%):*FX21,3
  2739. 3:=PE%
  2740. shell_AttachBumpHandler(b%,g%,QE%,RE%,sE%,tE%,SE%,vE%,HA$,IA$):
  2741. XA%,d%,c%,_%,gA%:d%=
  2742. shell_GetEventListOffset(b%,QE%,_U%+&68,16,
  2743. ):XA%=_U%!&68+d%:XA%!0=b%:XA%!4=QE%:XA%!8=SE%:XA%!&C=
  2744. shell_HeapBlockFetch(24):gA%=XA%!&C:gA%!0=g%:gA%!4=sE%:gA%!8=tE%
  2745. HA$>0
  2746. H<gA%!&C=
  2747. shell_HeapBlockFetch((
  2748. HA$)+1):_%=gA%!&C:$_%=HA$
  2749. gA%!&C=0
  2750. IA$>0
  2751. N<gA%!16=
  2752. shell_HeapBlockFetch((
  2753. IA$)+1):_%=gA%!16:$_%=IA$
  2754. gA%!16=0
  2755. vE%=-1
  2756. gA%!20=1
  2757. gA%!20=0
  2758. Usd%=
  2759. shell_GetEventListOffset(b%,RE%,_U%+&68,16,
  2760. ):XA%=_U%!&68+d%:XA%!0=b%:XA%!4=RE%:XA%!8=SE%*(-1):XA%!&C=gA%:
  2761. shell_HandleBumpIcons(d%,b%,g%,_button%):
  2762. hF%,HA%,XA%,FC%,_temp$,QD%:
  2763. mF%,dB%:
  2764. _button%<>2
  2765. dRXA%=_U%!&68+d%:_U%!288=b%:_U%!292=g%:_U%!296=d%:HA%=XA%!&C:QD%=HA%!16:
  2766. QD%<>0
  2767. nC_temp$=
  2768. shell_IconGetData(b%,HA%!0):FC%=
  2769. ("FN"+$QD%+"(_temp$)")
  2770. shell_IconGetData(b%,HA%!0))
  2771. _button%=1
  2772. u _new_val%=FC%+((XA%!8)*(-1))
  2773. _new_val%=FC%+XA%!8
  2774. HA%!20=0
  2775. _new_val%>HA%!8
  2776. _new_val%=HA%!8
  2777. _new_val%<HA%!4
  2778. _new_val%=HA%!4
  2779. _new_val%>HA%!8
  2780. _new_val%=HA%!4
  2781. _new_val%<HA%!4
  2782. _new_val%=HA%!8
  2783. :dB%=HA%!&C:
  2784. dB%<>0
  2785. 1_new_val$=
  2786. ("FN"+$dB%+"(_new_val%,_button%)")
  2787. _new_val$=
  2788. _new_val%
  2789. _new_val%<>FC%
  2790. shell_IconPutData(b%,HA%!0,_new_val$,-1)
  2791. shell_WindowSetSpriteArea(y%,RD%):
  2792. a%,MA%,zB%,SD%:a%=
  2793. shell_HeapBlockFetch(&64+(
  2794. shell_WindowCountIcons(y%)*32)):!a%=y%:
  2795. &400CC,,a%:a%!68=RD%:
  2796. shell_IconSetSpriteArea(a%!60,a%+76,RD%):
  2797. (a%!88)>0
  2798. zB%=0
  2799. (a%!88)-1:SD%=a%+92+zB%*32:
  2800. shell_IconSetSpriteArea(SD%!16,SD%+20,RD%):
  2801. &400C3,,a%:
  2802. &400C1,,a%+4
  2803. MA%<>y%
  2804. shell_UpdateWindowHandle(y%,MA%):y%=MA%
  2805. shell_HeapBlockReturn(a%):=y%
  2806. shell_IconSetSpriteArea(i%,GC%,BF%):
  2807. 3)=2)
  2808. 256)<>0)
  2809. GC%!4=BF%
  2810. shell_StrongHlpIsAvailable:
  2811. wA%,CA%:wA%=
  2812. _U%!&64
  2813. kCA%=
  2814. shell_HeapBlockFetch(256):wA%=
  2815. shell_OSVarExists(CA%,"StrongHelp$Dir"):
  2816. shell_HeapBlockReturn(CA%)
  2817. :=wA%
  2818. shell_MenuNew(R$):
  2819. &45BC1,,R$
  2820. h%:=h%
  2821. shell_MenuAdd(h%,QA$,J$):
  2822. J$<>""
  2823. &45BC2,h%,QA$,J$
  2824. &45BC2,h%,QA$
  2825. :=UD%
  2826. shell_MenuTick(fA%,WA%):
  2827. &45BC9,fA%,WA%:
  2828. shell_MenuTickOnly1(TA%,EA%):
  2829. &45BD1,TA%,EA%:
  2830. shell_MenuTickOnly2(fA%):
  2831. &45BD1,fA%:
  2832. shell_MenuShade(h%,WA%):
  2833. &45BCB,h%,WA%:
  2834. shell_MenuDotted(fA%,WA%):
  2835. &45BCA,fA%,WA%:
  2836. shell_MenuColours(fA%,vC%,wC%):
  2837. &45BD0,fA%,vC%,wC%:
  2838. shell_MenuWritable(fA%,WA%,bA%,t$):
  2839. &45BCD,fA%,WA%,bA%,t$:
  2840. shell_MenuPutData(fA%,P$):
  2841. &45BC8,fA%,P$:
  2842. shell_MenuCallHandler(y%,_h_blk%):
  2843. ("FN"+$y%+"(_h_blk%)")
  2844. shell_AttachOpenWindow(b%,A$):
  2845. a%,c%,d%:
  2846. shell_Tracef0("AttachOpenWindow:Attaching OpenWindow Handler"):
  2847. shell_MessageOneArg("SHELLMSG27","AttachOpenWindow")
  2848. shell_GetEventListOffset(b%,-1,_U%+304,&C,
  2849. ):a%=_U%!304+d%:a%!0=b%:a%!4=-1:a%!8=
  2850. shell_HeapBlockFetch(
  2851. (A$)+1):c%=a%!8:$c%=A$:
  2852. shell_AttachCloseWindowHandler(b%,A$):
  2853. a%,c%,d%:
  2854. shell_Tracef0("AttachCloseWindowHandler:Attaching CloseWindow Handler"):
  2855. shell_MessageOneArg("SHELLMSG27","AttachCloseWindow")
  2856. shell_GetEventListOffset(b%,-1,_U%+308,&C,
  2857. ):a%=_U%!308+d%:a%!0=b%:a%!4=-1:a%!8=
  2858. shell_HeapBlockFetch(
  2859. (A$)+1):c%=a%!8:$c%=A$:
  2860. shell_SpriteRename(qB%,YA$,ZA$):
  2861. 46,512+26,qB%,
  2862. shell_SpriteGetPtr(qB%,YA$),ZA$:
  2863. shell_SpriteAreaSave(qB%,F$):
  2864. 46,512+&C,qB%,F$:
  2865. shell_EnsurePoll:
  2866. :AA%=
  2867. shell_Poll_I(0,_U%!&94):
  2868. shell_Action(AA%):
  2869. AA%=0:
  2870. shell_WimpGetVersion:=_U%!316
  2871. shell_OSCheckVersion(EF%):=
  2872. shell_OSModuleCheckVersion("UtilityModule",EF%)
  2873. shell_OSModuleCheckVersion(aA$,a):
  2874. a%,ZB%,O$:a%=
  2875. shell_HeapBlockFetch(256):
  2876. ("Set Module$Check Y"):
  2877. ("RMEnsure "+aA$+" "+
  2878. a+" Set Module$Check N"):
  2879. 35,"Module$Check",a%,256,0,0
  2880. ,,ZB%:a%?ZB%=&D:
  2881. ("Unset Module$Check"):O$=$a%
  2882. shell_HeapBlockReturn(a%):
  2883. O$="N"
  2884. shell_MessageSendDataLoad(u%,Q$):
  2885. x%:x%=
  2886. shell_HeapBlockFetch(256):x%!0=256:x%!4=0:x%!&C=0:x%!16=5:x%!20=0:x%!28=0:x%!32=0:x%!36=0:x%!40=u%:$(x%+44)=Q$+
  2887. &400E7,17,x%,0:
  2888. shell_HeapBlockReturn(x%):
  2889. shell_MenuMakeFromFile(R$,bA$,h$):
  2890. h%,X%,B$,o%:
  2891. shell_FileExists(h$)
  2892. shell_MenuNew(R$):X%=
  2893. (h$):
  2894. #X%:o%=
  2895. shell_MenuAdd(h%,B$,bA$):
  2896. shell_BinarySearch(_search_term$,cA$,g$,FF%,WD%):
  2897. _pos%,kA%,_wp$,mC%,rF%,YD%,ZD%,ZE%,m%,aD%:WD%+=1:aD%=
  2898. :kA%=WD%:mC%=0:_pos%=kA%
  2899. 2:ZD%=FF%-1:YD%=WD%:
  2900. :_wp$=
  2901. ("FN"+cA$+"(_pos%)"):bD%=_pos%:
  2902. _search_term$=_wp$
  2903. ("FN"+g$+"(_search_term$,_wp$)")
  2904. +YD%=_pos%:kA%=_pos%-ZD%:_pos%=kA%
  2905. 2+mC%
  2906. ZD%=_pos%:mC%=_pos%:kA%=YD%-_pos%:_pos%=kA%
  2907. 2+mC%
  2908. ZE%=bD%
  2909. !ZE%=bD%:
  2910. shell_IconLastClicked:=_U%!32
  2911. shell_MenuGetNrItems(TA%):
  2912. k%,BA%,aE%:
  2913. &45BC7,TA%
  2914. k%:k%+=28:
  2915. :BA%=(k%?0
  2916. &80):aE%+=1:k%+=24:
  2917. BA%:=aE%
  2918. shell_MenuGetNrDotted(TA%):
  2919. k%,BA%,aC%:
  2920. &45BC7,TA%
  2921. k%:k%+=28:
  2922. :BA%=(k%?0
  2923. &80):
  2924. (k%?0
  2925. aC%+=1
  2926. k%+=24:
  2927. BA%=-1:=aC%
  2928. shell_MenuGetItemHandler(TA%,IC%):
  2929. UA%,f%,JA$:UA%=
  2930. shell_HeapBlockFetch(8):UA%!0=IC%:UA%!4=-1:
  2931. &45BC4,TA%,UA%
  2932. JA$=""
  2933. JA$=$(f%)
  2934. shell_HeapBlockReturn(UA%):=JA$
  2935. shell_MenuGetItemText(TA%,IC%):
  2936. UA%,f%,H$:UA%=
  2937. shell_HeapBlockFetch(8):UA%!0=IC%:UA%!4=-1:
  2938. &45BC4,TA%,UA%
  2939. ,,f%:H$=$(f%!&C):
  2940. shell_HeapBlockReturn(UA%):=H$
  2941. shell_MenuGetItemHandle(TA%,IC%):
  2942. UA%,f%,h%:UA%=
  2943. shell_HeapBlockFetch(8):UA%!0=IC%:UA%!4=-1:
  2944. &45BC4,TA%,UA%
  2945. ,,f%:h%=f%!8:
  2946. shell_HeapBlockReturn(UA%):=h%
  2947. shell_MenuGetItemHeight(TA%):
  2948. &45BC7,TA%
  2949. k%:=k%!20
  2950. shell_MenuCalculateHeight(TA%):
  2951. QA%:QA%=
  2952. shell_MenuGetNrItems(TA%)*
  2953. shell_MenuGetItemHeight(TA%):=QA%+(
  2954. shell_MenuGetNrDotted(TA%)*24)
  2955. shell_MenuSortItems(k%,eA$,NF%,DC%,eD%):
  2956. fD%:fD%=
  2957. shell_MenuGetNrItems(k%)-1:_shell_MS_handle%=k%:
  2958. eD%>fD%
  2959. eD%=fD%
  2960. &406C0:
  2961. shell_QuickSort(eA$,"_shell_MS_swap",NF%,0,eD%):
  2962. &406C1:
  2963. shell_QuickSort(g$,j$,_asc%,_start%,_end%):
  2964. _lo%,_h%,_F%,_temp%,o%:_lo%=_start%:_hi%=_end%:_F%=
  2965. :_temp%=_lo%-1+
  2966. (_hi%+1-_lo%):o%=
  2967. ("FN"+j$+"(_lo%,_temp%)"):
  2968. _asc%=0
  2969. ("FN"+g$+"(_lo%,_hi%)")
  2970. ((o%=
  2971. ("FN"+j$+"(_lo%,_hi%)"):_F%=
  2972. ("FN"+g$+"(_hi%,_lo%)")
  2973. -(o%=
  2974. ("FN"+j$+"(_hi%,_lo%)"):_F%=
  2975. _hi%=_hi%-1
  2976. _lo%=_lo%+1
  2977. _lo%=_hi%:
  2978. _start%<_lo%-1
  2979. shell_QuickSort(g$,j$,_asc%,_start%,_lo%-1)
  2980. _hi%+1<_end%
  2981. shell_QuickSort(g$,j$,_asc%,_hi%+1,_end%)
  2982. _shell_MS_swap(nC%,oC%):
  2983. k$,l$,bE%,cE%:k$=
  2984. shell_MenuGetItemText(_shell_MS_handle%,nC%):l$=
  2985. shell_MenuGetItemText(_shell_MS_handle%,oC%):bE%=
  2986. shell_MenuGetItemHandle(_shell_MS_handle%,nC%):cE%=
  2987. shell_MenuGetItemHandle(_shell_MS_handle%,oC%)
  2988. shell_MenuPutData(bE%,l$):
  2989. shell_MenuPutData(cE%,k$):=0
  2990. _shell_MS_comp(nC%,oC%):
  2991. k$,l$:k$=
  2992. shell_MenuGetItemText(_shell_MS_handle%,nC%):l$=
  2993. shell_MenuGetItemText(_shell_MS_handle%,oC%):
  2994. shell_WindowSetTitleRightJust(
  2995. s%,NA%,h%,KC%:KC%=
  2996. shell_WindowIsOpen(b%):s%=
  2997. shell_HeapBlockFetch(&64+(
  2998. shell_WindowCountIcons(b%)*32)):!s%=b%:
  2999. &400CC,,s%:NA%=s%!60:
  3000. (1<<3))
  3001. shell_Tracef0("WindowSetTitleRightJust:title flags = &"+
  3002. ~NA%):
  3003. shell_Tracef0("WindowSetTitleRightJust:Horizontally centred bit set.."):
  3004. shell_Tracef0("WindowSetTitleRightJust:Unsetting horizontally centred bit.."):NA%=NA%
  3005. (1<<3)
  3006. shell_Tracef0("WindowSetTitleRightJust:title flags = &"+
  3007. ~NA%)
  3008. shell_Tracef0("WindowSetTitleRightJust:Horizontally centred bit NOT set..")
  3009. shell_Tracef0("WindowSetTitleRightJust:Setting right justified bit.."):NA%=NA%
  3010. (1<<9):s%!60=NA%:
  3011. &400C3,,s%:
  3012. &400C1,,s%+4
  3013. b%<>h%
  3014. shell_Tracef0("WindowSetTitleRightJust:Updating window handle..."):
  3015. shell_UpdateWindowHandle(b%,h%):b%=h%
  3016. shell_OpenWindow(h%,0,0)
  3017. shell_HeapBlockReturn(s%):
  3018. shell_WindowSetTitleCentreJust(
  3019. s%,NA%,h%,KC%:KC%=
  3020. shell_WindowIsOpen(b%):s%=
  3021. shell_HeapBlockFetch(&64+(
  3022. shell_WindowCountIcons(b%)*32)):!s%=b%:
  3023. &400CC,,s%:NA%=s%!60:
  3024. shell_Tracef0("WindowSetTitleCentreJust:title flags = &"+
  3025. ~NA%)
  3026. shell_Tracef0("WindowSetTitleCentreJust:t_flags% AND (1 << 3) = "+
  3027. ~(NA%
  3028. (1<<3))):
  3029. (1<<3))=0
  3030. shell_Tracef0("WindowSetTitleCentreJust:Horizontally centred bit not set.."):
  3031. shell_Tracef0("WindowSetTitleCentreJust:Setting horizontally centred bit.."):NA%=NA%
  3032. (1<<3):
  3033. shell_Tracef0("WindowSetTitleCentreJust:title flags = &"+
  3034. ~NA%):s%!60=NA%
  3035. &400C3,,s%:
  3036. &400C1,,s%+4
  3037. b%<>h%
  3038. shell_Tracef0("WindowSetTitleCentreJust:Updating window handle..."):
  3039. shell_UpdateWindowHandle(b%,h%):b%=h%
  3040. shell_OpenWindow(h%,0,0)
  3041. shell_HeapBlockReturn(s%):
  3042. shell_IconGetSelectedIcons(b%,nB%,
  3043. eE%:eE%=(nB%<<16)+(1<<21):
  3044. &400D6,b%,n%,eE%,(nB%<<16)+(1<<21):
  3045. shell_GetLastMouseButton:=_U%!320
  3046. shell_GetLastWindowClicked:=_U%!28
  3047. shell_GetLastIconClicked:=_U%!32
  3048. shell_IconIndirSize(jA%,i%,GC%,X%):
  3049. bA%,fE%,e%,VC%:
  3050. &800100)=256
  3051. "bA%=GC%!8:
  3052. (GC%!4<>-1)
  3053. AfE%=GC%!4:
  3054. #X%=jA%+fE%:e%=0:
  3055. :VC%=
  3056. #X%:e%+=1:
  3057. VC%<32:bA%+=+e%
  3058. bA%=0
  3059. :=bA%
  3060. shell_StrongHlpChkFiles(G$):
  3061. shell_FileExists(G$+".HelpData")
  3062. <NB%=-1:
  3063. shell_MessageOneArg("SHELLMSG32","HelpData")
  3064. shell_FileExists(G$+".Index")
  3065. 9NB%=-1:
  3066. shell_MessageOneArg("SHELLMSG32","Index")
  3067. shell_CaretMoveCaret(b%,AA%):
  3068. z%,gE%,e%,f%,OB%:e%=0:f%=0:z%=
  3069. shell_HeapBlockFetch(&800):
  3070. &400D3,,z%:
  3071. z%!4<>-1
  3072. <gE%=z%!4:
  3073. &400D6,b%,z%,&40E000,&E000:
  3074. z%!e%=gE%
  3075. f%=e%
  3076. e%+=4:
  3077. z%!e%=-1:
  3078. 0:OB%=!z%
  3079. 1:OB%=z%!(e%-4)
  3080. z%!(f%+4)<>-1
  3081. OB%=z%!(f%+4)
  3082. OB%=!z%
  3083. OB%=z%!(f%-4)
  3084. OB%=z%!(e%-4)
  3085. &400D2,b%,OB%,-1,-1,-1,
  3086. shell_IconGetData(b%,OB%))
  3087. shell_HeapBlockReturn(z%):
  3088. shell_CaretPutFirstIcon(b%):
  3089. shell_CaretMoveCaret(b%,0):
  3090. shell_CaretPutLastIcon(b%):
  3091. shell_CaretMoveCaret(b%,1):
  3092. shell_CaretPutNextIcon(b%):
  3093. shell_CaretMoveCaret(b%,2):
  3094. shell_CaretPutPrevIcon(b%):
  3095. shell_CaretMoveCaret(b%,3):
  3096. shell_TemplateFileInfo(F$,
  3097. BA%):
  3098. EA%,iD%,qC%:
  3099. CA%,X%,TC%,BE%:
  3100. e%,VC%,iE%,AB%,rC%,i%:EA%=0:iA%=0:iD%=0:qC%=0:BA%=0:
  3101. shell_FileExists(F$)
  3102. BA%=-1
  3103. shell_FileType(F$)<>&FEC
  3104. BA%=-2
  3105. BA%=0
  3106. ?UCA%=
  3107. shell_HeapBlockFetch(&D):X%=
  3108. (F$):
  3109. #X%=16:
  3110. &C,4,X%,CA%,4:jA%=!CA%:
  3111. jA%>0
  3112. iA%+=1:kD%=0:
  3113. &C,4,X%,CA%,4:TC%=!CA%:
  3114. &C,4,X%,CA%,4:BE%=!CA%:
  3115. &C,4,X%,CA%,&C:iE%=
  3116. #X%=jA%+56:
  3117. &C,4,X%,CA%,4:i%=!CA%:
  3118. #X%=jA%+72:
  3119. &C,4,X%,CA%,&C:kD%+=
  3120. shell_IconIndirSize(jA%,i%,CA%,X%):
  3121. #X%=jA%+84:
  3122. &C,4,X%,CA%,4:AB%=!CA%:
  3123. AB%>0
  3124. rC%=0
  3125. AB%-1:
  3126. #X%=jA%+88+(rC%*32)+16:
  3127. &C,4,X%,CA%,4:i%=!CA%:
  3128. #X%=jA%+88+(rC%*32)+20:
  3129. &C,4,X%,CA%,&C:kD%+=
  3130. shell_IconIndirSize(jA%,i%,CA%,X%):
  3131. #X%=iE%:iD%+=kD%:
  3132. TC%>qC%
  3133. qC%=TC%
  3134. jA%=0:
  3135. shell_HeapBlockReturn(CA%):iB%=qC%+iD%
  3136. RO3_Present:
  3137. a%,ZB%,O$:a%=
  3138. shell_HeapBlockFetch(256):
  3139. ("Set RO3$Check Y"):
  3140. ("RMEnsure UtilityModule 3.00 Set RO3$Check N"):
  3141. 35,"RO3$Check",a%,256,0,0
  3142. ,,ZB%:a%?ZB%=&D:
  3143. ("Unset RO3$Check"):O$=$a%:
  3144. shell_HeapBlockReturn(a%):
  3145. O$="N"
  3146. shell_WindowCountIcons(b%):
  3147. LB%,mD%,AB%:
  3148. (_U%!&64
  3149. 1<<&A)
  3150. shell_Tracef0("WindowCountIcons:RISC OS 3 detected.."):
  3151. b%=-1
  3152. b%=-2
  3153. yLB%=
  3154. shell_HeapBlockFetch(88):!LB%=b%:
  3155. &400CC,,LB%+1:AB%=LB%!88:
  3156. shell_Tracef0("WindowCountIcons:nr_icons% = "+
  3157. shell_Tracef0("WindowCountIcons:RISC OS 3 NOT found.."):LB%=
  3158. shell_HeapBlockFetch(6000):
  3159. $!LB%=b%:
  3160. &400CC,,LB%:AB%=LB%!88
  3161. shell_Tracef0("WindowCountIcons:nr_icons% = "+
  3162. shell_HeapBlockReturn(LB%):=AB%
  3163.